2011-04-03 79 views
3

當我與全球自定義事件結合使用時,我正努力應對jQuery live()。jQuery全局自定義事件和live()似乎不工作

我jsfiddled(和簡化)從jQuery文檔本身的例子。

使用bind()作品:
http://jsfiddle.net/joshcomley/zShnd/

使用live()並不:
http://jsfiddle.net/joshcomley/QJDdH/

據我所知,在如何live()bind()工作,並與live()事件可如果相互抵消的差異樹中的事件返回false等。

我已閱讀儘可能多的博客帖子,因爲我可以得到我的手,但似乎沒有解釋組合live()全球自定義事件。

我只是想不通爲什麼live()在這個例子中不起作用!

任何人都可以幫我解釋一下嗎?

+0

+1,[jQuery live()](http://api.jquery.com/live/)僅舉例說明觸發'p'元素,但不是全局事件。 – Marnix 2011-04-03 11:54:37

+0

我建議你在jQuery網站上[創建問題](http://bugs.jquery.com/newticket?redirectedfrom=)。如果他們認爲這是開銷,他們會關閉你的問題,並對他們的理由給予好評。 – Marnix 2011-04-04 07:20:04

回答

3

您需要定位觸發事件時所需的元素。

所以使用

$('p').trigger('myCustomEvent'); 

例如在http://jsfiddle.net/gaby/QJDdH/2/


更新

這似乎是從jQuery團隊的決定..

報價從source code of the trigger method github source

// Handle a global trigger 
if (!elem) { 
// Don't bubble custom events when global (to avoid too much overhead) 
event.stopPropagation(); 

我能想到的(除了與jQuery的源擺弄),唯一的選擇是做一個

$('*').trigger('myCustomEvent'); 

但似乎它可能是昂貴的。(再次不是全局的,因爲非DOM綁定事件不會被觸發)..

+0

是的,但這不是一個全球性的事件呢?或者我混淆術語? – joshcomley 2011-04-03 12:46:45

+0

@joshcomley,是的,它不是......看起來這是jQuery團隊做出的明確選擇。看看我的答案中的更新.. – 2011-04-03 15:21:13

0

我認爲您想要執行以下操作,該操作將註冊名爲myCustomEve的實時單擊事件NT。

$("button").bind("click.myCustomEvent", function(e, myName, myValue) { 
    $(this).siblings("p").text("I've changed!"); 
});