删除侦听器范围内的事件侦听器

时间:2014-06-17 14:38:09

标签: javascript

是否可以在事件侦听器本身中删除事件侦听器?

例如:

var el = document.createElement('div');

el.addEventListener('message', function(e) {

  //.. do something

  el.removeEventListener( 'message', this );

  el.addEventListener('message', function(e) {

  // something else

});

});

似乎removeEventListener不起作用,因为第一个侦听器似乎总是在触发事件时捕获该事件。

2 个答案:

答案 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
  });
});