jquery undelegate帮助

时间:2011-07-14 00:03:04

标签: jquery

我将元素动态添加到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上。

由于

3 个答案:

答案 0 :(得分:3)

因为delegate()[docs]方法使用事件委派,所以只有一个处理程序分配给容器#wrap,它处理所有冒泡到它的点击事件。

一种解决方案是向被点击的元素添加一个处理程序,以阻止事件冒泡。

$('#wrap').delegate('div', 'click', getInfo);

function getInfo() {
    $(this).bind('click',false);
    // rest of the code
}

这会将处理程序绑定到单击的元素。处理程序不会阻止事件的传播(并阻止默认行为,但对于<div>没有默认行为)。

示例: http://jsfiddle.net/mzvHK/

答案 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);

参考:http://api.jquery.com/one/