2012-03-29 15 views
17

¿Cómo aplicaría la directiva "off" a un controlador nombrado?jquery controladores de eventos "on" y "off"

ex

var $btn = $("#theBtn"); 
var namedHandler = $btn.on("click", function() { 
//do something 
//then turn off 
}) 

habría que apagarlo como esto

$btn.off("click"); 

o podría hacer otra cosa que ahora se almacena en una variable?

namedHandler.off("click"); 

o

namedHandler.off(); 

etc.

Cualquier punteros muy apreciado.

Respuesta

11

La misma referencia al objeto jQuery estará en $btnynamedHandler. Ambos devuelven una referencia a lo mismo, por lo que la tarea asigna la misma cosa.

Puede convertirlo off() con cualquiera de los métodos.

Lo que puede ser más adecuado para tu ejemplo es namespacing your event, por lo que no va a desvincular off('click', ...)todosclick eventos.

+0

Eso es más o menos lo que quería saber. el manejador con nombre solo está almacenando un objeto jquery y no alguna lógica de manejo de eventos. great – Chin

2

Puede definir una función para su controlador y pasarla a .off() para desactivarla y .on() para reactivarla.

La documentación proporciona ejemplos para lograr este

http://api.jquery.com/off/

function aClick() { 
    $("div").show().fadeOut("slow"); 
} 
$("#bind").click(function() { 
    $("body").on("click", "#theone", aClick) 
    .find("#theone").text("Can Click!"); 
}); 
$("#unbind").click(function() { 
    $("body").off("click", "#theone", aClick) 
    .find("#theone").text("Does nothing..."); 
}); 
+1

Sí, aquí en la documentación. –

11

También puede hacer esto

function handleClick(event) 
{ 
    // code 
} 

$('#btn').on('click', handleClick); 

$('#btn').off('click', handleClick); 

Algunos ejemplos Utiles sólo alrededor de encendido/apagado here.

8

Además de lo @alex & dijo @WereWolf, a menudo me encuentro esto útil:

Para un solo uso manejador de eventos, se puede utilizar en lugar de .one().on() seguido por .off()

$("#foo").one("click", function() { 
    alert("This will be displayed only once."); 
}); 

http://api.jquery.com/one/

+0

Esto es más bien un comentario, no una respuesta a la pregunta. –

Cuestiones relacionadas