Pet*_*ter 5 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>Run Code Online (Sandbox Code Playgroud)
任何提示将是最有帮助的。
更新:
@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>
Run Code Online (Sandbox Code Playgroud)
更新 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>
Run Code Online (Sandbox Code Playgroud)
在此示例中,我们在同一函数中添加和删除侦听器作为替代方案,以防止出现冗余侦听器。
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()Run Code Online (Sandbox Code Playgroud)
<button id="btn-test">Button</button>Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
12026 次 |
| 最近记录: |