是否可以在事件侦听器本身中删除事件侦听器?
例如:
var el = document.createElement('div');
el.addEventListener('message', function(e) {
//.. do something
el.removeEventListener( 'message', this );
el.addEventListener('message', function(e) {
// something else
});
});
似乎removeEventListener不起作用,因为第一个侦听器似乎总是在触发事件时捕获该事件。
答案 0 :(得分:3)
使用命名函数:
el.addEventListener('message', doStuff);
function doStuff(e) {
//.. do something
el.removeEventListener( 'message', doStuff);
el.addEventListener('message', function(e) {
// something else
});
};
答案 1 :(得分:2)
您可以这样做,不会污染外部范围:
el.addEventListener('message', function f(e) {
//.. do something
el.removeEventListener('message', f);
el.addEventListener('message', function(e) {
// something else
});
});