javascript - 删除重复的事件监听器

标签 javascript events listener addeventlistener

我一直在努力寻找一种方法来删除事件监听器。我创建了一个函数,它将向按钮添加一个事件监听器,但如果该函数再次运行,我希望删除并再次添加事件监听器。但相反,它只会添加另一个事件监听器,当我单击按钮时,它将运行事件监听器函数两次。或者即使我可以阻止它向按钮添加第二个事件监听器也可以。

这是代码

<button id="myId">My Button</button>
 
 
 
<script>
 
 
 
myFunction()
myFunction()
 
function myFunction() {
     var el = document.getElementById('myId')
 
     var listenerFn = function () {
          console.log('My Message')
     }
 
     el.removeEventListener('click', listenerFn)
 
     el.addEventListener('click', listenerFn)
}
 
 
 
</script>

任何提示都是最有帮助的。

更新:

@FathiAlqa​​dasi 的回答是目前为止对我的问题最好的回答。但我应该展示更多的代码。监听器功能是动态的,可以根据其功能而变化。这是我的意思的另一个例子。

<button id="myId">My Button</button>



<script>

myFunctionA()
myFunctionA()



function myFunctionA() {
    var el = document.getElementById('myId')
    myFunctionB()
    function myFunctionB() {
        if (el.innerHTML === 'My Button') {
            var listenerFn = function () {
                console.log('My Message 1')
            }

               el.removeEventListener('click', listenerFn);

            el.addEventListener('click', listenerFn);
        }

        else {
            var listenerFn = function () {
                console.log('My Message 2')
            }

               el.removeEventListener('click', listenerFn);

            el.addEventListener('click', listenerFn);
        }
    }
}
</script>

更新 2:

感谢@提供代码。这是一个整洁的代码箱中的代码

<button id="myId">My Button</button>

<script>
    var listenerFn;
    myFunction();
    myFunction()
    function myFunction() {
        var el = document.getElementById('myId')
        el.removeEventListener('click', listenerFn);
        listenerFn = function() {
            console.log('My Message')
        }
        el.addEventListener('click', listenerFn, false);
    }
</script>

最佳答案

在这个例子中,我们在同一个函数中添加和删除监听器作为替代来防止冗余监听器。

function callbackFunction() {
  console.log('Callback function was called.')
}

function addRemoveListener() {
  let el = document.getElementById('btn-test')

  el.removeEventListener('click', callbackFunction)
  el.addEventListener('click', callbackFunction)
}

addRemoveListener()
addRemoveListener()
<button id="btn-test">Button</button>

关于javascript - 删除重复的事件监听器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45723205/

相关文章:

javascript - 如果编辑中下拉值发生变化如何执行函数?

javascript - 错误: 'this' object is incorrect; In JQuery click event - Unexpected Behavior on click

php - 比较 2 个字符串并显示差异(php 或 javascript)

java - 滚动 Pane 中所有复选框的操作监听器?

java - 获取鼠标单击事件的正确结果

JavaScript 监听器 - Angular 2 区域

javascript - 可以在 jQuery 中调用常规 JavaScript 函数吗?

python - Tkinter 将 <Shift-MouseWheel> 绑定(bind)到水平滚动

java - 如何在java中正确实现端口监听器作为服务?

java - 如何将工具提示添加到 jtable 中的单元格?