【问题标题】:How to remove an event from only one div on which event is performed如何仅从执行事件的一个 div 中删除事件
【发布时间】:2020-12-23 11:22:31
【问题描述】:
let popped = 0;

document.addEventListener('click', function(e){

if (e.target.className === "balloon"){
    
            e.target.style.backgroundColor = "#ededed";
            e.target.textContent = "POP!";
            popped++;
            removevent(e);               
            checkAllPopped();
}   

});

function removevent(e) {
    e.target.removeEventListener('click',function() {})
}

一旦用户单击 div,我就会尝试删除该事件。但无论我如何尝试放置 removeEventListenever 它都不起作用。我试过用自定义函数来做:

function abc(e) {
//some code
}
document.addEventListener('click',abc,true)
document.removeEventListener('click',abc,true)

不过,这也没有成功。

【问题讨论】:

    标签: javascript dom-events addeventlistener removeeventlistener


    【解决方案1】:

    如果您想逐个删除事件侦听器,请考虑为每个气球添加单独的事件侦听器。然后,在处理函数中,您可以在每个气球“弹出”时将其从每个气球中移除。

    let popped = 0;
    
    const balloons = document.querySelectorAll('.balloon');
    
    function handler(e){
        if (e.target.className === "balloon"){
          e.target.style.backgroundColor = "#ededed";
          e.target.textContent = "POP!";
          popped++;
          console.log(popped);
          e.target.removeEventListener('click', handler);
        }
      }
    
    for (let balloon of balloons) {
      balloon.addEventListener('click', handler);
    }
    <div class="balloon">Balloon</div>
    <div class="balloon">Balloon</div>
    <div class="balloon">Balloon</div>
    <div class="balloon">Balloon</div>
    <div class="balloon">Balloon</div>

    【讨论】:

    • 这可行,但我正在尝试使用 removeEventListener 来实现。
    • 不确定您当前的方法是否可行。您已将事件侦听器附加到文档,因此您将在 DOM 树中捕获所有单击事件。我不相信您可以选择性地忽略某些元素。
    • 如果我使用 querySelectorAll 向所有 div 添加事件会怎样?
    • 是的,那肯定是可行的!让我看看能不能装点东西
    • 我也试试。感谢您的帮助
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-07
    • 2014-08-14
    • 1970-01-01
    相关资源
    最近更新 更多