2014-03-30 54 views
10

當我們使用alert()時,代碼有時會中斷。爲什麼alert()會中斷代碼執行?

例如:

HTML:

<span>Hi</span> 

的Javascript:

$(document).ready(function() { 

    $("span").dblclick(function() { 
     alert("b"); 
    }); 
    $("span").click(function() { 
     alert("a"); 
    }); 

}); 

alert("b")甚至不露面。

但是,如果我們將alert()更改爲console.log,它將被記錄。

Alert Demo & console.log Demo

那麼,究竟是怎麼回事?

+1

我不知道爲什麼這是甚至downvoted。這是一個很好的問題 –

+0

我很高興找到這個問題。我甚至沒有意識到這一點。我以爲我的代碼中有一個錯誤,因爲它沒有正確執行。拿出警報後它工作得很好:D – Sarah

回答

8

alert打開模型對話框。打開時,除警告本身外,您無法與頁面的任何部分進行交互。

由於您無法與頁面進行交互,因此雙擊的後半部分無法到達跨度,因此雙擊事件不會觸發。

+0

另一個類似的問題:http://stackoverflow.com/questions/10173843/alert-method-not-resulting-in-window-focus-on-modern-browsers警報獲得重點,所以第二次點擊不會發生在頁面上。 –

1

因爲您正在捕捉第一次點擊並顯示警報。第二次點擊不會被捕獲,因爲警報現在已成爲焦點。

如果您登錄到控制檯,則兩次點擊都會被捕獲,您會注意到「a」會被記錄兩次。

1

有幾個函數可以在代碼被調用時停止運行。這被稱爲同步函數,導致代碼暫停,直到您點擊OK。 alert()是同步的,同樣是prompt()。這會導致點擊事件發生並暫停代碼運行,因此不會再發生雙擊事件...

3

使用alert()將停止所有代碼執行。如果您已經捕獲了停止代碼執行的單擊,則無法捕獲雙擊。

爲了演示,我已將alert註釋掉,以便在您的小提琴中進行單擊。您可以看到HERE該警報現在發生在雙擊上。

相關問題