我想使用普通的javascript从元素中删除“焦点”事件监听器,但不起作用
document.getElementById("txttaskdateDeploy").removeEventListener("focus", function(e){});
但在jquery下有效
$("#txttaskdateDeploy").unbind("focus");
谁能说出为什么它不能在普通javascript中工作
答案 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);