Javascript删除“焦点”事件侦听器

时间:2019-04-04 10:59:46

标签: javascript

我想使用普通的javascript从元素中删除“焦点”事件监听器,但不起作用

document.getElementById("txttaskdateDeploy").removeEventListener("focus", function(e){});

但在jquery下有效

$("#txttaskdateDeploy").unbind("focus");

谁能说出为什么它不能在普通javascript中工作

2 个答案:

答案 0 :(得分:6)

您传递给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); });

答案 1 :(得分:3)

您需要将要删除的特定事件侦听器传递给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);