我一直在試圖找到一種方法來刪除事件偵聽器。我做了一個函數,將一個事件監聽器添加到按鈕,但如果該函數再次運行,我希望事件監聽器被刪除並再次添加。但相反,它只是添加另一個事件監聽器,當我點擊按鈕時,它將運行兩次事件監聽器函數。或者,即使我可以阻止向按鈕添加第二個事件偵聽器也會起作用。刪除重複的事件偵聽器
下面是代碼
<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