2012-08-03 16 views
5

ho questo:Rimuovere gli eventi con jQuery o javascript

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

In altra vista ho questo:

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

Come fare ciò che è nel commento? Con il mio codice corrente vengono chiamati sia doSomething1 che doSomething2. Voglio disabilitare quello che non ho bisogno.

+0

Mi consiglia di mantenere il gestore di eventi e aggiungere una variabile che dice che cosa facciamo quando viene premuto un tasto. –

risposta

9

Per rimuovere un listener di eventi con jQuery, è possibile utilizzare .off():

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

Ricordate il keydown method è solo una scorciatoia per .on("keydown", ...).

Tuttavia, per "disabilitarli" potrebbe essere più semplice avere un solo gestore che esegue diverse operazioni in base alla vista corrente selezionata, o che hanno entrambi vincolati e ciascuno con un breve controllo che la vista destra è attualmente selezionata .

4

Se doSomething2 è un riferimento funzione di, è possibile utilizzare .off() (jQuery 1.7+) o .unbind() per rimuovere i gestori di eventi legati jQuery:

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

// or 

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

Si noti che l'ordine di esecuzione sarà un fattore. Se il codice per separare il gestore eventi viene eseguito per primo, non avrà alcun effetto. In generale, i gestori di eventi jQuery vengono attivati ​​nell'ordine in cui sono associati, quindi se il primo frammento di codice nella domanda viene eseguito per primo, questo approccio non funzionerà (sarà necessario riordinarlo).

4

provare questo come di seguito utilizzando jQuery:

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