2013-02-26 12 views
7

jqueryでオンとオフを切り替える方法を追加した後、イベントリスナーを削除するにはどうすればいいですか?javascriptでイベントリスナーを削除するには?

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

しかし、実際にはイベントリスナーは削除されません。 addEventListenerコードを関数に入れ、その関数をremoveEventListenerに渡すと、bcは機能しません。関数にパラメータを渡すことはできません。誰でもこれを行う方法を知っていますか?

+2

[JavaScript:remove event listener](http://stackoverflow.com/questions/4402287/javascript-remove-event-listener)また、[Javascript:匿名のイベントリスナーを削除する](http:// stackoverflow .com/questions/3106605/anonymous-event-listenerの削除) – Ohgodwhy

+0

この質問はparamsの問題には対処しません。 – Tanya

答えて

15

.removeEventListener

document.removeEventListener('touchstart', myListener); 

を削除するときに、あなたがstrictモードでない場合は、もう一度それを渡す変数としてリスナーを入れて、.addEventListener

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

を経由して接続しリスナーは自分自身を削除することができますarguments.callee

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

あなたがstrictモードである場合、あなたは

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

自体を削除する機能が必要な場合は、リスナーで変数を使用したい場合はという名前の関数式を使用する必要があります何かによって変更される可能性があります(例:ループ)、あなたは今、あなたはlistenerGenerator(popup)でリスナーを作成することができますし、それがスコープpopup変数をインスタンス意志

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

ため、ジェネレータ関数を書くことができます。 popupのオブジェクトの場合は、ByRefとなり、変更される可能性があります。

+0

addEventListenerのmyListener関数へのeとpopupのパラメータはどのように渡されますか?それは私が最も固執していることです。 paramsです。 – Tanya

+0

'e'と' popup'はどこから来たのですか? 'e'は_Event_ですか? _useCapture_''をtrueに設定する必要があります –

+0

addEventListener関数は、渡されたポップアップパラメータを取得する関数の内部にあります。それは外側の機能から来ています。 eはイベントです。どのように私はuserCaptureを設定するのですか? – Tanya

関連する問題