2012-10-18 103 views
1

說我有:JavaScript操作順序

<div id="name" class="button"></div>

,並在javacript文件我定義二者的點擊類的按鈕和id名稱的行爲,是這樣的:

$("#name").click(function(event){ 
    alert("hi"); 
}) 

$(".button").click(function(event){ 
    alert("bye"); 
}) 

當我點擊div,我會在「再見」警報之前收到「hi」警報,因爲「hi」出現在「再見」之上嗎?或者做一些其他事情來確定最先發生的事如果這兩個功能在不同的文件中呢?那麼它會首先包含哪個JavaScript文件(出現在更接近HTML文件的頂部)?我認爲jQuery與此無關,對吧?

+1

你爲什麼不試試這個在您的網頁瀏覽器? – StaticVariable

+0

@jhonraymos - 我不確定是否有JavaScript執行定義的優先順序。我不想在瀏覽器/環境的有限子集上進行測試,只是發現我忘記了一個主要的行爲不同的 –

回答

3

你是完全正確的,它是誠實的基礎上首先綁定。在你的情況下,"#name"首先被綁定,然後是".button",所以這就是爲什麼它們最終以同樣的順序被執行的原因。它不是基於哪一頁首先在頁面上看到的,而是首先綁定的。綁定可能發生在一個函數中,所以直到函數被調用(顯然)纔會發生,但該函數可能在其他綁定之前被聲明 - 並不意味着什麼,它必須被調用。在不同的文件中也是如此。當文件被解析時,它們被執行。所以我之前說的也適用於此 - 只要綁定按照事件被解析的順序執行(從HTML頁面的頂部到底部),它們將按照該順序發生。我很確定發生這種情況的原因是因爲jQuery將這些綁定存儲在FIFO中 - 先進先出。

+0

是html始終從上到下分析的? –

+0

除非我錯過了一些東西,我相信如此。我的意思是,這就是爲什麼有些人不打擾使用jQuery的'$(document).ready'之類的東西,而只是在''元素的底部寫下他們的代碼。這樣,他們知道所有的HTML都已經被解析並準備好進行操作。此外,這也是爲什麼您必須在使用它的任何其他庫/代碼(或者任何庫/代碼)之前包含jQuery庫的另一個原因。但對Javascript也是如此 - 應該理解的是代碼在頁面被解析時執行,所以它必須從上到下(如正常的編程邏輯)。 – Ian

0

您首先看到'hi'警報,因爲該事件首先被綁定。

所以,當事件被基於該順序解僱他們必然要..