我一直在试图找到一种方法来删除事件侦听器。我做了一个函数,将一个事件监听器添加到按钮,但如果该函数再次运行,我希望事件监听器被删除并再次添加。但相反,它只是添加另一个事件监听器,当我点击按钮时,它将运行两次事件监听器函数。或者,即使我可以阻止向按钮添加第二个事件侦听器也会起作用。删除重复的事件侦听器
下面是代码
<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>
任何提示将是最有帮助。
UPDATE:
@FathiAlqadasi的回答是最好的,到目前为止我的问题。但我应该展示更多的代码。监听器功能是动态的,可以根据其功能而变化。这是我的意思的另一个例子。
<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:
谢谢@的代码。这里是一个整洁的codebox
<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>
我已经做了我整个代码的更新。 – Peter
好吧,你可以尝试上面的代码我测试它,它的工作 –
你的代码确实工作,但不是当功能是动态的,这是我应该在我的第一篇文章中显示的。阅读我的更新以了解更多以上内容。 – Peter