2011-09-06 61 views
2

我在動態添加元素到頁面時遇到了必要的實時事件問題。Jquery「live」事件沒有觸發

定期點擊事件正常工作。我想知道爲什麼現場點擊事件失敗。在JSFiddle中設置的演示中有說明。也許有人可以向我解釋爲什麼會發生這種情況。

演示: http://jsfiddle.net/MezfS/2/

感謝您的時間。

+0

爲我工作。 :/ –

+0

Mully你可以發佈什麼適合你。更新上面的演示併發布你的鏈接 - 謝謝。 – HGPB

回答

0

與委託,並允許click事件泡儘可能的錨固定它:

$('#pui-tabs a').delegate('.tab-close', 'click', function(e) { 
     tabselector.tabs('remove', tabselector.tabs('option', 'selected')); 
}); 

http://jsfiddle.net/MezfS/21/

1

.live依靠事件一直冒泡到文件,並且你停止你的處理程序的立即傳播,從而停止它的工作。試試這個:

$('li[id=^="tab"]').delegate(".tab-close", "click", function(e) { 
    e.stopImmediatePropagation(); 
    tabselector.tabs('remove', tabselector.tabs('option', 'selected')); 
}); 
+0

我已經在我的帖子中的JSFiddle演示中嘗試過你的例子,但它不起作用。問題在於現場活動甚至沒有被解僱。 – HGPB

3

「活」事件的行爲與普通事件處理程序的行爲不同。綁定實時事件時,會將事件處理程序附加到頁面中最頂層的元素之一(例如body或document)。因爲當你點擊頁面上的任何地方時,你也點擊了正文,事件就會冒泡。例如,您點擊包含在正文中的div中的鏈接,將爲鏈接觸發事件,爲div觸發事件,然後觸發正文。

當事件到達主體時,「活動」事件處理程序會查看它,並且如果點擊來源與您的選擇器相匹配,它將觸發您的功能。

除非鏈接上的處理程序之一或div阻止事件傳播。在這種情況下,事件就會停止,不會冒泡,永遠不會到達「現場」處理程序。

我想,jQuery UI在選項卡上放置一個處理程序,以捕獲點擊,並且該處理程序實際上是停止傳播,使「活」處理程序無用。

+0

謝謝 - 這很有趣。當.close-tab跨度放置在錨的外部時,但我需要它在錨內開火。 – HGPB

+0

好點,但是如果你在e.stopImmediatePropagation();上面加上一個警告,它應該在任何情況下都會觸發,對吧?但事實並非如此。 –

+0

在發佈之前正在挖掘源代碼進行驗證,而這正是發生的情況。 – jmar777