Tengo un input type="image"
. Esto actúa como las notas de celda en Microsoft Excel. Si alguien ingresa un número en el cuadro de texto con el que input-image
está emparejado, configuro un controlador de eventos para el input-image
. Luego, cuando el usuario hace clic en image
, obtiene una pequeña ventana emergente para agregar algunas notas a los datos.
Mi problema es que cuando un usuario ingresa un cero en el cuadro de texto, necesito deshabilitar el input-image
controlador de eventos del. He intentado lo siguiente, pero fue en vano.
$('#myimage').click(function { return false; });
fuente
unbind()
está funcionando? Lo agregué y ambos eventos todavía se están activando.$('#myimage').off('click').on('click',function(){...})
.unbind()
me ayudó en una situación en la que alternaba un montón de casillas de verificación, pero me di cuenta de que estaba volviendo a agregar el.click()
controlador repetidamente, lo que provocó que la aplicación se bloqueara.Esto no estaba disponible cuando se respondió esta pregunta, pero también puede usar el método live () para habilitar / deshabilitar eventos.
Lo que sucederá con este código es que cuando hace clic en el botón #disparable, agregará la clase deshabilitada al elemento #myimage. Esto hará que el selector ya no coincida con el elemento y el evento no se disparará hasta que se elimine la clase 'inhabilitada', lo que hace que el selector .live () sea válido nuevamente.
Esto tiene otros beneficios al agregar un estilo basado en esa clase también.
fuente
live()
, nunca antes pensé en usarlo de esta manera ... Además de la conveniencia de codificación, ¿es más rápido u ofrece otras ventajas al usar bind / unbind?Si desea responder a un evento solo una vez , la siguiente sintaxis debería ser realmente útil:
Usando argumentos.callee , podemos asegurarnos de que se elimine el controlador de una función anónima específica y, por lo tanto, tener un controlador de tiempo único para un evento determinado. Espero que esto ayude a otros.
fuente
Esto se puede hacer utilizando la función de desvinculación.
Puede agregar múltiples controladores de eventos al mismo objeto y evento en jquery. Esto significa que agregar uno nuevo no reemplaza a los antiguos.
Existen varias estrategias para cambiar los controladores de eventos, como los espacios de nombres de eventos. Hay algunas páginas sobre esto en los documentos en línea.
Mira esta pregunta (así es como me enteré de desvincular). Hay alguna descripción útil de estas estrategias en las respuestas.
Cómo leer las funciones de devolución de llamada de desplazamiento del cursor en jquery
fuente
tal vez el método de desvinculación funcione para ti
fuente
Tuve que configurar el evento en nulo usando el accesorio y el attr. No podría hacerlo con uno u otro. Tampoco pude hacer que .unbind funcione. Estoy trabajando en un elemento TD.
fuente
$("#elementId").click(function(){//Event execution code goes here});
para que no esté en la página html. Para aclarar que realmente necesitamos usar.unbind()
, o el preferido.off()
unbind
yoff
no resolvió el problema. ¡Muchas gracias!Si el evento se adjunta de esta manera , y el objetivo se debe desacoplar:
fuente
Puede agregar el
onclick
controlador como marcado en línea:Si es así, el jquery
.off()
o.unbind()
no funcionará. También debe agregar el controlador de eventos original en jquery:Luego, jquery tiene una referencia al controlador de eventos y puede eliminarlo:
VoidKing menciona esto un poco más oblicuamente en un comentario anterior.
fuente
Actualizado para 2014
Con la última versión de jQuery, ahora puede desvincular todos los eventos en un espacio de nombres simplemente haciendo
$( "#foo" ).off( ".myNamespace" );
fuente
La mejor manera de eliminar el evento onclick en línea es
$(element).prop('onclick', null);
fuente
Para
remove
TODOSevent-handlers
, esto es lo que funcionó para mí:Eliminar todos los controladores de eventos significa tener el plano
HTML structure
sin todos losevent handlers
adjuntos alelement
y suchild nodes
. Para hacer esto,jQuery's clone()
ayudó.Con esto, tendremos el
clone
lugar en lugar deloriginal
sinevent-handlers
él.Buena suerte...
fuente
Gracias por la información. muy útil, lo usé para bloquear la interacción de la página mientras estaba en modo de edición por otro usuario. Lo usé junto con ajaxComplete. No necesariamente el mismo comportamiento pero algo similar.
fuente
En caso de que el
.on()
método se haya utilizado previamente con un selector particular, como en el siguiente ejemplo:Ambos
unbind()
y los.off()
métodos no van a funcionar.Sin embargo, el método .undelegate () podría usarse para eliminar completamente el controlador del evento para todos los elementos que coincidan con el selector actual:
fuente
Si utiliza
$(document).on()
para agregar un agente de escucha a un elemento creado dinámicamente, es posible que deba usar lo siguiente para eliminarlo:fuente
Esto también funciona bien. Simple y fácil. Ver http://jsfiddle.net/uZc8w/570/
fuente
si configura la
onclick
víahtml
necesitaremoveAttr ($(this).removeAttr('onclick'))
si lo configura a través de jquery (como después del primer clic en mis ejemplos anteriores), entonces necesita
unbind($(this).unbind('click'))
fuente
Sé que esto llega tarde, pero ¿por qué no usar JS simple para eliminar el evento?
o, si usa una función con nombre como controlador de eventos:
fuente
Todos los enfoques descritos no funcionaron para mí porque estaba agregando el evento click
on()
al documento donde se creó el elemento en tiempo de ejecución:Mi solución alternativa:
Como no podía desvincular la clase ".button", acabo de asignar otra clase al botón que tenía los mismos estilos CSS. Al hacerlo, el controlador de eventos / en vivo ignoró el clic finalmente:
Espero que ayude.
fuente
Espero que mi siguiente código lo explique todo. HTML:
fuente
})(jQuery);
al IIFE cuando ya se puede acceder a él globalmente?Simplemente elimine eso del botón:
fuente