匿名コールバック関数のバインドを解除する可能性はありますか...
link.addEventListener("click", function () {
//Any piece of code
}, true);
link.removeEventListener("click", function () {
//Any piece of code
});
ありがとう、アジャン
匿名コールバック関数のバインドを解除する可能性はありますか...
link.addEventListener("click", function () {
//Any piece of code
}, true);
link.removeEventListener("click", function () {
//Any piece of code
});
ありがとう、アジャン
はい。これを行うには、匿名イベント ハンドラー関数へのハンドルを使用してどこかに保存しarguments.callee
、後でこの保存された参照を使用して同じバインドを解除します。
// binding
var el = document.getElementById('foo');
el.addEventListener('click', function(e) {
alert('Hi');
// this is where we save a handle to the anonymous handler
// arguments.callee gives us a reference to this function
el['_ev'] = arguments.callee;
}, false);
// unbinding
var el = document.getElementById('foo'), handler = el['_ev'];
if(handler) {
// here we use the saved reference to unbind it
el.removeEventListener('click', handler);
el['_ev'] = false;
}
いいえ。匿名関数へのそれらは実際には異なるためです。{ a: 1 } === { a: 1 }
false を返すのと同じ理由です。
次のことを行う必要があります。
var func = function () { ... };
element.addEventListener( 'click', func, false );
element.removeEventListener( 'click', func, false );
関数はポインタで識別されます。匿名関数へのポインタがないため、remove()に渡して、削除する関数を指定する必要はありません。
複製には別のポインターがあるため、複製関数を渡すだけでは実行されません。
関数を変数に割り当ててから、その変数をremove()に渡すことに固執する必要があります。