2011-02-27 17 views
38

Cuando busqué la solución a un problema que tengo ahora, encontré este hilo: jQuery: more than one handler for same event. Ahora me pregunto si es posible eliminar solo uno de estos controladores.¿Es posible eliminar un controlador de eventos específico de un evento con múltiples controladores?

+0

¿Para el mismo evento o eventos diferentes? –

+0

Esto no se puede hacer fácilmente. Tienes que hacer un truco, jQuery no fue diseñado para esto. use el espacio de nombres de eventos en su lugar. – Raynos

+0

Creo que si almacena el controlador de eventos en una variable, es posible que pueda eliminarlo de la misma forma en que lo hace, con la variable, pero no lo he probado. –

Respuesta

65

Es posible, si no lo hace uso devoluciones de llamada anónimos:

var $elt = $(...); 

function clickHandler1(event){...} 
function clickHandler2(event){...} 

// bind both 
$elt.click(clickHandler1); 
$elt.click(clickHandler2); 

// unbind just the first 
$elt.unbind('click', clickHandler1); 

A wild Demo appeared!

Ver también: .unbind() docs.

+13

Wild Demo apareció! :-D – maryisdead

45

En realidad, puede hacerlo utilizando las devoluciones de llamada anónima a través de espacios de nombre del evento:

$elt.bind('click.handler1', function(event) { 
    alert('click handler 1'); 
}); 

$elt.unbind('click.handler1'); 

Ver demostración modificado here.

Y here para obtener más información.

Esto se añadió en jQuery 1.4.3, que en realidad salió más de 4 meses antes de que se formulara la pregunta.

+0

¿podemos pasar parámetros en la función? –

+0

Esta es una buena respuesta cuando se usa la devolución de llamada anónima. Amándolo. –

+1

Esta debería ser la respuesta aceptada, ya que la mayoría de las llamadas de enlace tendrán una función anónima. – Omeed

Cuestiones relacionadas