JS是否可以从其他地方描述的函数内部删除侦听器,然后传递给侦听器?
我希望这样的事情有效,但它不是(我的意思是行self.removeEventListener("blur", named, false);
)。在调试模式下,我看到this
值正确传递。
someElement.addEventListener("blur", function namedFunc() {handler(this)} ,false);
function handler(self) {
self.removeEventListener("blur", namedFunc, false);
}
答案 0 :(得分:2)
名称 namedFunction
仅显示inside that function。因此,您需要将其传递给处理程序,以便以后可以将其删除。
var someElement = document.getElementById('foo');
someElement.addEventListener('click', function namedFunc() {
handler(this, namedFunc);
}, false);
function handler(self, fn) {
alert('handler called');
self.removeEventListener('click', fn, false);
}
<button id="foo">click me!</button>
答案 1 :(得分:1)
您可以扩大处理程序的范围。
有关问题的详细解释,请参阅Yoshi's post。
function listenOnce(el, eventName, handler) {
var wrapper = function(e) {
handler.apply(this, arguments);
el.removeEventListener(eventName, wrapper);
}
el.addEventListener(eventName, wrapper, false);
}
listenOnce( document.getElementById('foo'), 'click', function() {
alert('handler called');
});
请注意,您正在做的事情可以抽象
CI_Session