【发布时间】:2015-08-11 07:08:18
【问题描述】:
我使用单个选择器将委托事件处理程序附加到页面上的许多元素。由于事件是针对单个元素触发的,我想仅关闭该元素的事件处理程序基于某些条件逻辑。 这意味着我不一定要在第一次点击时禁用该事件。但是如果不关闭所有这些,我不知道该怎么做。
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 的 off documentation 说我需要提供一个 string 作为第二个参数,而不是 jQuery 对象 ($(ev.target)),但如果我提供一个字符串,则没有任何值仅指点击的项目。
来自 jQuery 的关闭文档:
要删除特定的委托事件处理程序,请提供一个选择器 争论。选择器字符串必须与传递给的字符串完全匹配 .on() 附加事件处理程序时。删除所有委派 在不删除非委托事件的情况下从元素中获取事件,使用 特殊值“**”。
那么如何关闭特定元素的委托事件处理程序?
Here's a JSFiddle of the code above
更新:根据提供的初步答案,添加了一些不起作用的选项示例。
【问题讨论】:
-
否,因为这会从所有按钮中删除所有委托的事件处理程序。我只想从被点击的那个中删除它。
-
作为一种解决方法,这可能会有所帮助:Is there any way to delegate the event one in jQuery?
-
您尝试将
ev.target作为第二个参数吗? -
@LShetty Doesn't seem to work.
标签: javascript jquery delegates event-delegation