我想使用纯 javascript 从元素中删除"焦点"事件侦听器,但不起作用
document.getElementById("txttaskdateDeploy").removeEventListener("focus", function(e){});
但下面 jquery 工作
$("#txttaskdateDeploy").unbind("focus");
谁能说出为什么它在纯JavaScript中不起作用
传递给removeEventListener
的第二个参数必须是要删除的函数。
你在那里有一个函数表达式,所以它将创建一个全新的函数。由于它是一个新功能,因此它无法匹配任何现有的事件侦听器,因此不会删除它们。
这可能有效:
const x = function (e) { console.log(1); };
foo.addEventListener("focus", x);
foo.removeEventListener("focus", x);
但这不会(两个不同但相同的函数不是同一个函数(:
foo.addEventListener("focus", function (e) { console.log(1); });
foo.removeEventListener("focus", function (e) { console.log(1); });
您需要将
要删除的特定事件侦听器传递给 removeEventListener
方法,而不仅仅是传递空函数。
应该如何做到这一点的一个例子是:
const listener = function(e) {
console.log('focused!'); // do anything here
}
// Add event listener
document.getElementById("txttaskdateDeploy").addEventListener("focus", listener);
// When you want to remove the event listener
document.getElementById("txttaskdateDeploy").removeEventListener("focus", listener);