【发布时间】:2020-03-25 19:55:02
【问题描述】:
我有一个具有搜索功能的单页应用程序 (SPA),我试图在其中跟踪用户如何与 Adobe Analytics 中的搜索栏进行交互。如果我导航到 SPA 的 5 个不同“页面”,以下代码将触发该事件 6 次。似乎addEventListener 正在设置但如果“页面”上没有发生搜索则不会被清除。每次加载“页面”时,这些事件监听器基本上都会排队,一旦输入搜索,它们就会同时触发,从而清除队列。
如果未执行搜索并且仅在通过按 Enter 执行搜索后才触发此事件,我如何清除 eventListeners?
假设我有代码:
clearInterval(interval);
var interval = setInterval(function(){
if (document.querySelector("form div[data-autoid='search_bar'] input")) {
inputField = document.querySelector("form div[data-autoid='search_bar'] input")
inputField.addEventListener('keydown', searchEntered)
clearInterval(interval);
}
}, 500);
function searchEntered(e) {
if (e.key == "Enter") {
console.log("search entered");
var event = new CustomEvent('searchEntered');
dispatchEvent(event);
}
}
【问题讨论】:
-
间隔发生了什么?对于任何用例,这似乎都不是一个好的解决方案。
-
setEventListener()不会移除已经添加的事件监听器。 -
@ScottMarcus - 在设置 eventListener 之前,间隔会监听搜索栏是否存在。
标签: javascript html dom-events addeventlistener event-listener