我已经使用一个选择器将委托事件处理程序附加到页面上的许多元素上。由于事件是针对单个元素触发的,因此我想基于一些条件逻辑仅关闭该元素的事件处理程序。这意味着我不一定要在第一次单击时禁用该事件。但是我无法在不关闭所有功能的情况下弄清楚该怎么做。
HTML:
<button>One</button>
<button>Two</button>
<button>Three</button>
JS:
$(document).on('click', 'button', function(ev) {
// doesn't work because argument needs to be a string
$(document).off('click', $(ev.target));
// doesn't do what I want b/c turns off events on all buttons, not just this one
$(document).off('click', 'button');
// doesn't work because event is on document, not button
$(ev.target).off('click');
});
jQuery的关闭文档说,我需要提供一个字符串作为第二个参数,而不是jQuery对象($(ev.target)
),但是如果我提供一个字符串,则没有任何值仅指单击的项目。
从jQuery的关闭文档中:
要删除特定的委托事件处理程序,请提供选择器参数。选择器字符串必须与附加事件处理程序时传递给.on()的字符串完全匹配。要从元素中删除所有委派事件而不删除未委派事件,请使用特殊值“ **”。
那么,如何关闭特定元素的委托事件处理程序?
更新:根据提供的初始答案,添加了一些不起作用的选项的示例。
通过网络阅读后,答案是您做不到!您可以全部删除或全部删除。解决方法可能如下所示。
$(document).on('click', '.btn', function (ev) {
alert('pressed');
$(this).removeClass("btn");
});
演示@小提琴
HTML示例:
<button class="btn">One</button>
<button class="btn">Two</button>
<button class="btn">Three</button>
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句