2011-08-23 71 views
1

我有一個關於jQuery綁定工作的問題。每當我們對任何元素使用綁定方法並編寫一些回調代碼時,是否會在綁定事件上執行完整的代碼「每次」或者是否jQuery只記住該代碼的輸出/結果並僅執行該結果。關於jQuery綁定的問題()

也可以在回調代碼內部生成另一個事件嗎?

像它是如何工作的。

+0

它我不清楚你問什麼相關綁定 – kasdega

回答

1

每次觸發事件中的另一個事件,必然事件對指定目標的所有功能得到執行。這些回調函數的返回值用於確定事件是否應該繼續傳播。

有調用的腳本的一部分和事件的回調函數之間的一些顯著的差異:

  1. jQuery的標準化回調,以便它在結合靶的上下文中執行(即this指結合的元件,該事件被分配到)
  2. 回調參數自動設置時,事件被觸發
  3. 事件異步執行,所以有可能是與變量值一些意想不到的結果(循環索引等i可以使它們的網絡連接由當時的回調被稱爲最終值)

由於回調只是功能,他們可以做任何事情,任何其他功能可以做,包括調用trigger。請注意不要讓遞歸函數調用到同一個事件來導致自己的無限循環。

你不會想打電話:

function foo() 
{ 
    foo(); 
} 

同樣,你不會想撥打:

$('#foo').click(function(){ 
    //short form for .trigger('click') 
    $(this).click(); 
}); 
-1

您可以使用.trigger()輕鬆生成另一個事件。

編輯: 閱讀並重讀第一個問題後。我相信你正在尋找的答案是bind()每次執行。但是,在回調代碼更改DOM的情況下,可能會將元素添加到該元素上的事件不會被綁定的位置。考慮添加按鈕的代碼。如果您在所有代碼中使用$("#mybutton").bind("click"),則此新元素不會綁定任何事件。爲了得到一個「點擊」來做某件事,你必須在它被添加到DOM之後綁定它,否則你不得不使用.live()或.delegate()而不是.bind()。

+0

爲什麼下跌投票? – kasdega

1

回調函數從頭開始評估每個事件 這裏:

http://jsfiddle.net/turaaa/wxBF4/

你可以看到,每次點擊都會產生不同的結果。

,是的,你可以很容易產生回調

+0

請參閱我的答案... .bind()不適用於稍後添加到DOM的元素。因此,如果回調函數向DOM添加一個元素,它還必須提前執行bind()或.live()/。委託()。 – kasdega