2011-07-14 88 views
2

我必須動態地添加到div「包裝」的元素,如:jQuery的undelegate幫助

<div id='wrap'> 
    <div id="one">apple</div> 
    <div id="two">pear</div> 
</div> 

孩子的div有點擊進入一個Ajax調用的事件。

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

我想取消點擊被點擊的特定div的點擊事件。換句話說,如果單擊div#one,則該事件將從div#1中取消刪除,但仍然在div#2上進行委派。

感謝

回答

1

你可以添加一個類來點擊div s表示最終會在未來篩選出來:

$('#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/

+0

這工作'outta框」。 TY – zack

3

因爲delegate()[docs]方法使用事件代表團,只有一個分配給容器#wrap的處理程序處理所有觸發它的點擊事件。

一個解決方案是向點擊元素添加一個處理程序,以防止事件冒泡。

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

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

這會將處理程序綁定到被單擊的元素。該處理程序只會阻止事件的傳播(並阻止默認行爲,但對於<div>沒有默認行爲)。

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

0

這不是一個直接的答案只是更多的替代:

jQuery的.one()會給你的每個元素只觸發一次的事件:

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

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