15

jqueryでonとoffを使用する方法で、追加した後にイベントリスナーを削除するにはどうすればよいですか?

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

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

4

2 に答える 2

27

リスナーを変数として配置し、経由でアタッチします.addEventListener

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

で削除するときにもう一度渡します.removeEventListener

document.removeEventListener('touchstart', myListener);

厳密モードでない場合は、リスナーを自分自身で削除することができますarguments.callee

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

厳密モードの場合、関数自体を削除するには、名前付き関数式を使用する必要があります

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

何か (ループなど) によって変更される可能性のある変数をリスナーで使用する場合は、たとえば、ジェネレーター関数を記述できます。

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

でリスナーを作成すると、変数listenerGenerator(popup)のスコープが設定されます。がObjectの場合はByRefになるため、変更される可能性があることにpopup注意してください。popup

于 2013-02-26T22:26:22.737 に答える