取消注册jQuery中的委托事件
Unregister delegated events in jQuery
我们设这个:
<ul>
<li id="l1">aap</li>
<li id="l2">noot</li>
<li id="l3">wim</li>
</ul>
使用jQuery代码:
$('ul').on('click', 'li', function() {
console.log("You clicked on " + $(this).text());
})
我想实现的是:当用户单击其中一个li时,应该关闭仅该li的事件侦听器。
这可以工作,但会删除所有li的侦听器:
$('ul').on('click', 'li', function() {
console.log("You clicked on " + $(this).text());
$('ul').off('click');
})
我阅读了jQuery的'on()'和'off()'的文档,但无法将它们结合在一起。
任何想法?
解决方案
为已单击的项添加一个类,并将其排除在处理程序中。
$('ul').on('click', 'li:not(.ignore)', function() {
console.log("You clicked on " + $(this).text());
// This adds a class to prevent the handler from hitting again
$(this).addClass('ignore');
});
见https://jsfiddle.net/79yp6hpq/3/
<标题> 如果你仔细想想,你看到的行为是有道理的。你告诉它删除'ul'
的点击处理程序,它正在处理所有的'li'点击。
通常情况下,你会设置单独的处理程序并在单击时解除绑定,但由于委托事件不能设置为单独的处理程序(据我所知),我们必须使用一个解决方案。我已经通过添加一个类实现了这一点,但可能还有其他几种方法可以区分已被单击的项。
标题>相关文章:
- 注册OpenLayers事件时,即使使用匿名函数或绑定,JavaScript关闭也会触发循环内的所有内容
- 如何从已注册的事件发送 JavaScript 对象
- 使用谷歌图表将mousedown事件注册为click
- 没有为Ajax添加的新元素注册Jquery事件
- 事件虽然注册了一次,但会触发多次
- Chrome 扩展程序在后台注册事件.js
- 注册用于捕获阶段的事件侦听器在冒泡之前未触发 - 为什么
- 设置重复按钮以注册点击事件jquery
- 在元素添加到DOM之前,将事件注册到元素中
- 为什么在jQuery中将事件注册到文档中是一种糟糕的做法
- 当元素持有input+标签时,如何将click事件注册到元素
- 如何将jquery事件注册到非子元素的动态添加元素
- 为什么要避免onclick HTML属性而使用标准事件注册模型呢?
- 如何有效地将DOM事件注册到特定的JavaScript对象实例
- 内部事件注册与图像验证的高级注册
- 在document.ready中将Bind事件注册为DOMNodeInserted
- JS事件注册代替onclick..但如何使其可重复使用呢?解析ID
- 为什么iframe的不同onload事件注册方式会产生不同的结果
- 将现有事件注册到ajax加载的DOM
- 如何在更换事件注册区域时防止丢失事件