我将元素动态添加到div'wrap'中,例如:
<div id='wrap'>
<div id="one">apple</div>
<div id="two">pear</div>
</div>
子div有点击事件进入ajax调用。
$('#wrap').delegate('div', 'click', getInfo);
我想取消单击特定div中的click事件。换句话说,如果单击div#one,则事件将从div#1中取消,但仍保留在div#2上。
由于
答案 0 :(得分:3)
因为delegate()
[docs]方法使用事件委派,所以只有一个处理程序分配给容器#wrap
,它处理所有冒泡到它的点击事件。
一种解决方案是向被点击的元素添加一个处理程序,以阻止事件冒泡。
$('#wrap').delegate('div', 'click', getInfo);
function getInfo() {
$(this).bind('click',false);
// rest of the code
}
这会将处理程序绑定到单击的元素。处理程序不会阻止事件的传播(并阻止默认行为,但对于<div>
没有默认行为)。
答案 1 :(得分:1)
您可以为点击的div
添加一个类,以便将来最终将其过滤掉:
$('#wrap').delegate('div:not(.clicked)', 'click', function(event) {
// You could just add this to getInfo instead of calling it from the handler:
$(this).addClass("clicked");
getInfo.call(this, event);
});
以下是一个示例:http://jsfiddle.net/7EpSK/
答案 2 :(得分:0)
这不仅仅是一种替代方案的直接答案:
jQuery .one()
将为您提供一个每个元素只触发一次的事件:
$('#wrap div').one('click', getInfo);