2011-08-09 12 views
2

假設我有我的網頁上的按鈕:我的元素上的哪個jQuery附加事件首先觸發?

<input type='button' id='myButton' value='Click me!' /> 

假設我寫了下面的jQuery:

$(document).ready(function() { 
    var button = $('#myButton'); 
    button.click(doThis); 
    button.click(doThat); 
} 

function doThis() { 
    // do something 
} 

function doThat() { 
    //do something else 
} 

當單擊該按鈕時,我怎麼能知道哪些功能應該先執行?還是取決於我無法控制的事情?

+0

他們幾乎肯定會按照註冊順序進行調用,但這似乎是一個可怕的事情依靠。 – Pointy

回答

9

該處理程序在它們已經被附連到該元件的順序執行(參照documentation):

如果存在註冊的多個處理程序,它們將總是在它們被結合的順序執行。

所以在你的情況下,首先doThis然後doThat將被執行。

注意:這隻適用於jQuery。有關純DOM事件處理程序的信息,請參見@StuperUser's answer

有關JavaScript中事件處理的一般信息,我可以推薦the articles at quirksmode.org

0

他們將按您綁定他們的順序執行(doThis後跟doThat)。

3

jQuery事件將按附件順序觸發,如@Felix Kling和@Kyle所說的。

這不是jQuery以外的情況。據jQuery in Action Second Edition - 在DOM 2級事件模型(例如使用addEventListener,而不是$.bind或稱之爲方法)

注意的是,即使火處理他們的順序建立,這個順序是不由標準保證!此代碼的測試人員從未觀察到除了建立順序之外的順序,但編寫依賴於此順序的代碼將是愚蠢的。請務必注意,在元素上建立的多個處理程序可能以隨機順序觸發。

使用jQuery的另一個原因。

+0

對於純DOM事件處理程序可能是正確的,但不適用於由jQuery處理的事件。 –

+1

@Felix Kling,已經從你的鏈接上讀到了bind(),並相應地更新了答案。 – StuperUser

相關問題