【发布时间】:2018-03-27 05:23:26
【问题描述】:
我有可编辑的 html 页面,因此用户可以复制和粘贴 html 元素,也可以动态创建元素。我在这些元素中挂钩了一些事件侦听器,但显然我需要在这些动态添加的元素中挂钩事件侦听器。我想出的解决方案是,每次用户关注这些元素时,都会触发一个事件,并且所需的事件侦听器与该特定元素挂钩。
$('body').on('focusin', '.propclass', function() {
autocomplete(this,idsprop);
});
一切都很好,除了每次我挂钩事件侦听器时,它不会丢弃以前的事件侦听器,而是为该元素添加一个事件侦听器,例如,如果我在该元素上关注 5 次,它钩住并调用该元素 5 次。
我已尝试通过以下方式删除以前的事件侦听器:
inp.removeEventListener("input",call_input,true);
但是没有用。
function autocomplete(inp, arr) {
inp.removeEventListener("input",call_input,true);
inp.removeEventListener("keydown",call_keydown,true);
inp.addEventListener("input", function(e) {
call_input(e);
});
inp.addEventListener("keydown", function(e) {
call_keydown(e);
});
};
所以每次autocomplete 调用时,我首先尝试删除监听器然后添加新监听器。
有什么方法可以删除之前的事件监听器?我的方法是正确的还是有更好的方法来做到这一点?
【问题讨论】:
-
所以,最终@CertainPerformance 答案是您正在寻找的答案。一旦他注意到您的更新,他可能会根据您的用例对其进行定制。如果您测试它并且它有效,请记住选择他的答案以奖励他并将其标记为对其他社区用户有用。
标签: javascript dom-events