有人可以帮忙检查一下为什么removeHandler 不起作用吗?以及如何让它发挥作用? 谢谢。
<body>
<button onclick="removeHandler()" id="myBtn">remove</button>
<p id="demo">hello</p>
<script>
document.getElementById("demo").addEventListener("click", myFunction("random: "));
function myFunction(t) {
var x = function(){
document.getElementById("demo").innerHTML = t+Math.random();
};
return x;
}
function removeHandler() {
document.getElementById("demo").removeEventListener("click", myFunction("random: "));
}
</script>
</body>
最佳答案
因为myFunction
为每次调用返回一个新函数。每次调用 myFunction
时,它都会创建(定义)一个新函数并返回它。
function myFunction() {
return function() {};
}
var f1 = myFunction();
var f2 = myFunction();
console.log(f1 === f2);
修复:
您必须将 myFunction
的返回值存储到一个变量中,然后将该变量传递给 addEventListener
和 removeEventListener
:
var f = myFunction("random: ");
document.getElementById("demo").addEventListener("click", f, false);
// ...
document.getElementById("demo").removeEventListener("click", f);
关于javascript - 为什么removeEventListener不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43624322/