在ES6中删除事件侦听器

时间:2017-02-06 15:36:13

标签: javascript ecmascript-6

我有以下代码:

Android

如果我能够在侦听器中命名函数,那将很容易。但在我的情况下,这是不可能的。

看起来像是:

document.getElementsByClassName('drag')[i].addEventListener('mousedown', (e) => {
    console.log('mousedown' + i);
});

有没有办法让它发挥作用?

谢谢。

3 个答案:

答案 0 :(得分:2)

是的,你可以这样写。

document.getElementsByClassName('drag')[i].addEventListener('mousedown', mouseDownFun);
function mouseDownFun(e){
  console.log('mousedown' + i);
}
e.currentTarget.removeEventListener(e.type, mouseDownFun);

因此,只要触发鼠标按下事件,它就会在mouseDownFun中监听。

答案 1 :(得分:1)

  

如果我能够在侦听器中命名函数,那将很容易。但在我的情况下,这是不可能的。

如果它不能让你做你想做的事情,请不要使用箭头功能。

document.getElementsByClassName('drag')[i].addEventListener('mousedown', function handler(e) {
    console.log('mousedown' + i);
    e.currentTarget.removeEventListener(e.type, handler);
});

答案 2 :(得分:0)

有两种方法

  1. 定义函数时,然后根据需要添加和删除侦听器:

    // Define a function
    const handler = () => {
        console.log('Click event...');
    }
    
    // Select the element and add event listener
    const img = document.querySelector('img');
        img.addEventListener('click', handler, false);
    
    // ...
    
    // Remove the event listener
    img.removeEventListener('click', handler, false);
    
  2. 添加事件侦听器并在事件发生时将其删除:

    // Select the element and add event listener
    const img = document.querySelector('img');
       img.addEventListener('click', function handler(event) {
          console.log('Click event...');
    
          // On event, remove the event listener
          event.currentTarget.removeEventListener(event.type, handler);
       });