2013-02-26 17 views
7

Mi chiedo come posso rimuovere un listener di eventi dopo averne aggiunto uno, il modo in cui si usa e si interrompe in jquery?Come rimuovere un listener di eventi in javascript?

document.removeEventListener('touchstart'); 
document.addEventListener('touchstart', function (e) { 
    closePopupOnClick(e, popup); 
}); 

ma questo in realtà non rimuove il listener di eventi. Se inserisco il codice addEventListener in una funzione e trasferisco la funzione nel removeEventListener, non funzionerà bc, non è possibile passare parametri nella funzione. Qualcuno sa come fare questo?

+2

possibile duplicato di [JavaScript: rimuovere listener di eventi] (http://stackoverflow.com/questions/4402287/javascript-remove-event-listener) anche [Javascript: rimozione di un listener di eventi anonimi] (http: // stackoverflow .com/questions/3106605/remove-an-anonimo-event-listener) – Ohgodwhy

+0

no quella domanda non affronta il problema dei params. – Tanya

risposta

15

Mettere l'ascoltatore come una variabile e collegare tramite .addEventListener

var myListener = function (e) { 
    closePopupOnClick(e, popup); 
}; 
document.addEventListener('touchstart', myListener, true); 

poi passarlo di nuovo quando si rimuove con .removeEventListener

document.removeEventListener('touchstart', myListener); 

Se siete non in modalità rigorosa voi può far sì che un ascoltatore si rimuova con arguments.callee

document.addEventListener('touchstart', function (e) { 
    closePopupOnClick(e, popup); 
    document.removeEventListener('touchstart', arguments.callee); 
}, true); 

Se si è in modalità rigorosa, è necessario utilizzare un chiamato funzione di espressione se si desidera una funzione per rimuovere se stesso

document.addEventListener('touchstart', function myListener(e) { 
    closePopupOnClick(e, popup); 
    document.removeEventListener('touchstart', myListener); 
}, true); 

Se si desidera utilizzare le variabili in chi ascolta che può essere cambiato da qualcosa (es un ciclo), quindi è possibile scrivere una funzione generatore, per esempio

function listenerGenerator(popup) { 
    return function (e) { 
     closePopupOnClick(e, popup); 
    }; 
} 

Ora è possibile creare l'ascoltatore con listenerGenerator(popup) e sarà portata variabile popup. Si noti che se popup è un, sarà ByRef e pertanto potrebbe essere soggetto a modifiche.

+0

come si passa, i parametri ee popup alla funzione myListener in addEventListener? questo è quello che sono più bloccato. sono i param. – Tanya

+0

Da dove provengono 'e' e' popup'? 'e' è l'_Event_? quindi è necessario impostare _useCapture_ 'true' –

+0

La funzione addEventListener si trova all'interno di una funzione che riceve il parametro popup passato. Quindi viene dalla funzione esterna. e è l'evento. come posso impostare userCapture? – Tanya

Problemi correlati