2012-08-03 26 views
5

tengo esto:Eliminar eventos con jQuery o Javascript

$(function(){ 
    //remove keydown doSomething2 
    $("body").keydown(doSomething1); 
}); 

En otro punto de vista tengo esto:

$(function(){ 
    //remove keydown doSomething1 
    $("body").keydown(doSomething2); 
}); 

Cómo hacer lo que es en el comentario? Con mi código actual, se invocan tanto doSomething1 como doSomething2. Quiero inhabilitar el que no necesito.

+0

Recomiendo mantener el controlador de eventos y añadir una variable que indica qué no hacer cuando se pulsa una tecla. –

Respuesta

9

Para eliminar un detector de eventos con jQuery, puede utilizar .off():

$("body").off("keydown", doSomething2); 

Recuerde el keydown method es sólo un atajo para .on("keydown", ...).

Sin embargo, para "desactivarlos" podría ser más fácil tener un solo controlador que ejecuta cosas diferentes según la vista seleccionada actualmente, o tener ambos vinculados y cada uno con una comprobación corta de que la vista correcta está actualmente seleccionada .

4

Si doSomething2 es una referencia función, puede utilizar .off() (jQuery 1.7+) o .unbind() para eliminar controladores de eventos de jQuery con destino:

$('body').off('keydown', doSomething2); 

// or 

$('body').unbind('keydown', doSomething2); 

Tenga en cuenta que el orden de ejecución va a ser un factor. Si el código para desvincular el controlador de eventos se ejecuta primero, no tendrá ningún efecto. En general, los manejadores de eventos jQuery se desencadenan en el orden en que están vinculados, por lo que si el primer fragmento de código en su pregunta se ejecuta primero, este enfoque no funcionará (tendrá que volver a ordenarlo).

4

probar esto de la siguiente manera usando jQuery:

$(function(){ 
    // this would remove keydown from body 
    $("body").unbind('keydown', doSomething2); 
}); 
Cuestiones relacionadas