【发布时间】:2018-01-25 03:59:13
【问题描述】:
我一直在尝试找到一种方法来删除事件侦听器。我制作了一个函数,它将向按钮添加事件侦听器,但如果该函数再次运行,我希望删除并再次添加事件侦听器。但相反,它只会添加另一个事件侦听器,当我单击按钮时,它将运行事件侦听器函数两次。或者即使我可以阻止它向按钮添加第二个事件侦听器也可以。
这里是代码
<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>
任何提示都会很有帮助。
更新:
@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:
感谢@提供代码。这是一个整洁的代码框中的代码
<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>
【问题讨论】:
标签: javascript events listener addeventlistener