【发布时间】:2017-01-31 13:43:47
【问题描述】:
我想知道 Javascript 或 jQuery 是否有办法删除事件侦听器。假设我想做一个我只想触发一次的函数,例如假设我想要一个按钮来显示文档上的一些隐藏元素,我会做这个函数(假设隐藏元素有一个hidden隐藏它们的类):
jQuery('#toggler').click(function() {
console.log('Hidden elements are now shown');
jQuery('.hidden').removeClass('hidden');
});
够简单吧?现在,我的实际问题来了,我不希望 jquery 每次单击按钮时都一遍又一遍地运行该函数,因为元素已经显示出来了,所以有没有一种干净的方法可以做它 ?因此,在此示例中,在多次单击切换器后,我只想获得一条控制台消息。
我可以使用jQuery(this).unbind('click'),但这会导致删除所有触发器,而我只想删除当前触发器。
当我遇到这种情况时,我通常会这样解决它(这丑并且实际上并没有阻止代码执行,而只是处理代码的结果) :
var toggler_clicked = false;
jQuery('#toggler').click(function() {
if(toggler_clicked) return;
toggler_clicked = true;
console.log('Hidden elements are now shown');
jQuery('.hidden').removeClass('hidden');
});
另外我不想使用jQuery的one,因为我需要有条件地删除触发器时也会遇到同样的问题,所以如果你能帮忙请给我一个动态的答案。
提前致谢!
【问题讨论】:
标签: javascript jquery eventtrigger