Javascript 删除'focus'事件侦听器



我想使用纯 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);

最新更新