2009-05-05 15 views
102

Tengo un problema. Básicamente, cuando un usuario hace clic en enlace de un 'Editar' en una página, el siguiente código de jQuery funciona:Cómo eliminar todos los controladores de eventos Click en Jquery

$("#saveBtn").click(function() { 
    saveQuestion(id); 
}); 

Al hacer esto, el evento de clic del botón de guardar llama al método saveQuestion() y transmite el ID de la pregunta para la cual se hizo clic en el enlace 'Editar'.

Pero si en la misma sesión el usuario hace clic edición el 2 preguntas, entonces en lugar de sobrescribir el anterior controlador de click caso, en vez provoca 2 controladores de eventos para funcionar, uno que pudiera poner saveQuestion(1) y el otro podría llamar saveQuestion(2). Al hacer esto, 1 pregunta sobrescribe a la otra.

¿Hay alguna forma de eliminar todos los eventos click anteriores que se han asignado a un botón?

Respuesta

179

Se podría utilizar off() para eliminar un evento de este modo:

$("#saveBtn").off("click"); 

pero esto va a eliminar todos los eventos de clic unidos a este elemento. Si la función con SaveQuestion es el único evento enlazado, lo anterior lo hará. Si no hacer lo siguiente:

$("#saveBtn").off("click").click(function() { saveQuestion(id); }); 
+29

Desde jQuery 1.7, se debe utilizar dentro y fuera de lugar de atar y desatar –

+0

@LockTar puede sugerir cómo debe escribió en su lugar? –

+0

@JohnMagnolia Vea mis cambios arriba. –

13

¿Hay alguna forma de eliminar todos los eventos de clic anteriores que se han asignado a un botón?

$('#saveBtn').unbind('click').click(function(){saveQuestion(id)}); 
2

Si ha utilizado ...

$(function(){ 
    function myFunc() { 
     // ... do something ... 
    }; 
    $('#saveBtn').click(myFunc); 
}); 

... entonces será más fácil para desenlazar más tarde.

+1

¿Cómo te imaginas? No importa cómo estén vinculados los eventos de un elemento, siempre se pueden desenlazar de la misma manera ... $ ('# saveBtn'). Unbind ('cualquier evento (s)'); Ahora, para RE-BIND ... sí, su técnica puede ser más fácil en ciertas circunstancias. – KyleFarris

+1

Si desvincula todos los eventos de clic, entonces no es diferente. Pero si solo deseaba desvincular una acción específica, no me gustaría volver a escribir ese evento en dos lugares. Y como dijiste, si quiero volver a vincularlo más tarde, eso es más fácil de hacer, porque no tengo que escribir la función por tercera vez. –

6
$('#saveBtn').off('click').click(function(){saveQuestion(id)}); 
0
$('#saveBtn').off('click').on('click',function(){ 
    saveQuestion(id) 
}); 

Uso de jQuery off y on

Cuestiones relacionadas