如何删除 JavaScript 中的事件侦听器?
How can I remove an event listener in JavaScript?
我目前正在尝试通过单击按钮删除事件侦听器(请参阅下面的代码)但它永远不会起作用,我知道我应该使用相同的函数来取消事件(此处为 keyboardControl)但是它似乎根本不起作用。
提前致谢
<button class="start">start</button>
<button class="stop">stop</button>
const start = document.querySelector(".start")
const stopbtn = document.querySelector(".stop")
start.addEventListener("click", () => keyboardControl())
stopbtn.addEventListener("click", () => {
document.removeEventListener("keydown", keyboardControl)
})
function keyboardControl() {
document.addEventListener("keydown", (e) => {
switch(e.keyCode) {
case 37: //left arrow key
console.log("left")
break
case 39:
console.log("right")
break
}
})
}
您必须将传递给 addEventListener
的相同函数传递给 removeEventListener
。您传递给 addEventListener
的函数是
(e) => {
switch(e.keyCode) {
case 37: //left arrow key
console.log("left")
break
case 39:
console.log("right")
break
}
}
由于您没有在任何地方存储对它的引用,因此您无法将其删除。将该函数分配给变量并使用它来添加和删除它:
const start = document.querySelector(".start")
const stopbtn = document.querySelector(".stop")
function handleKey(e) {
switch (e.keyCode) {
case 37: //left arrow key
console.log("left")
break
case 39:
console.log("right")
break
}
}
function keyboardControl() {
document.addEventListener("keydown", handleKey);
}
start.addEventListener("click", () => keyboardControl())
stopbtn.addEventListener(
"click",
() => document.removeEventListener("keydown", handleKey)
)
<button class="start">start</button>
<button class="stop">stop</button>
删除 keyboardControl
无效有多种原因:
- 这实际上不是您要删除的处理程序。该函数添加了另一个事件处理程序,但删除它不会自动删除它添加的处理程序。
keyboardControl
永远不会作为事件处理程序绑定到 document
。
我目前正在尝试通过单击按钮删除事件侦听器(请参阅下面的代码)但它永远不会起作用,我知道我应该使用相同的函数来取消事件(此处为 keyboardControl)但是它似乎根本不起作用。 提前致谢
<button class="start">start</button>
<button class="stop">stop</button>
const start = document.querySelector(".start")
const stopbtn = document.querySelector(".stop")
start.addEventListener("click", () => keyboardControl())
stopbtn.addEventListener("click", () => {
document.removeEventListener("keydown", keyboardControl)
})
function keyboardControl() {
document.addEventListener("keydown", (e) => {
switch(e.keyCode) {
case 37: //left arrow key
console.log("left")
break
case 39:
console.log("right")
break
}
})
}
您必须将传递给 addEventListener
的相同函数传递给 removeEventListener
。您传递给 addEventListener
的函数是
(e) => {
switch(e.keyCode) {
case 37: //left arrow key
console.log("left")
break
case 39:
console.log("right")
break
}
}
由于您没有在任何地方存储对它的引用,因此您无法将其删除。将该函数分配给变量并使用它来添加和删除它:
const start = document.querySelector(".start")
const stopbtn = document.querySelector(".stop")
function handleKey(e) {
switch (e.keyCode) {
case 37: //left arrow key
console.log("left")
break
case 39:
console.log("right")
break
}
}
function keyboardControl() {
document.addEventListener("keydown", handleKey);
}
start.addEventListener("click", () => keyboardControl())
stopbtn.addEventListener(
"click",
() => document.removeEventListener("keydown", handleKey)
)
<button class="start">start</button>
<button class="stop">stop</button>
删除 keyboardControl
无效有多种原因:
- 这实际上不是您要删除的处理程序。该函数添加了另一个事件处理程序,但删除它不会自动删除它添加的处理程序。
keyboardControl
永远不会作为事件处理程序绑定到document
。