[英]setTimeout - Weird behavior
請考慮以下HTML:
<html>
<head></head>
<body>
<input type="text" onblur="window.setTimeout('document.title += 2;', 0);" />
<input type="button" onclick="document.title += 1" />
</body>
</html>
並執行以下步驟:
現在,事件將按以下順序發生:
在我得到的所有可訪問的瀏覽器上測試:
document.title = '21' //Expected behavior
但! 在生產瀏覽器(Windows XP + IE 7)上,我得到:
document.title = '12' //Unexpected behavior
我也嘗試在我的本地機器(IE 10)上以IE 7模式模擬它,無法重現它。
這顯然是我遇到的問題的簡化示例。 否則我可以簡單地擺脫setTimeout。
在實際場景中,setTimeout調用實際上是由第三方腳本庫(ASP.NET Dev Express組件)進行的。
除了這個問題的實際解決方案(我認為我可以處理),可以對這種行為應用什么解釋?
更新:
使用表達式new Date().getTime()
來獲取瀏覽器執行的每個步驟的時間。 它發生如下:
1387369361417 //document.title += 1
1387369361433 //document.title += 2
兩種可能性:
mousedown狀態是阻止腳本。 事件必須等到其他腳本和用戶交互完成才能觸發。 鑒於IE中腳本-UI奇怪/可怕的歷史,我敢打賭mousedown“開始用戶交互”,mouesup“結束用戶交互”。 在IE7中加載它:
<input type="text" onblur="window.setTimeout('output(2));', 0); output(3);" /> <input type="button" onclick="output(1);" />
...然后在文本字段上聚焦()后,單擊該按鈕真的很慢 。 我猜你會看到312
。 (與任何半體面瀏覽器都會顯示的321
相反。)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.