簡體   English   中英

setTimeout - 奇怪的行為

[英]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>

[ 0延遲演示100ms延遲150ms延遲 ]

並執行以下步驟:

  • 用戶輸入輸入(焦點)。
  • 用戶單擊該按鈕。

現在,事件將按以下順序發生:

  • 輸入文字模糊事件。
  • 按鈕單擊事件。

在我得到的所有可訪問的瀏覽器上測試:

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

兩種可能性:

  1. 您的點擊(mousedown + mouseup)在IE7的最短超時期限之前完成。
  2. mousedown狀態是阻止腳本。 事件必須等到其他腳本和用戶交互完成才能觸發。 鑒於IE中腳本-UI奇怪/可怕的歷史,我敢打賭mousedown“開始用戶交互”,mouesup“結束用戶交互”。 在IE7中加載它:

     <input type="text" onblur="window.setTimeout('output(2));', 0); output(3);" /> <input type="button" onclick="output(1);" /> 

    http://jsfiddle.net/sMcE3/

    ...然后在文本字段上聚焦()后,單擊該按鈕真的很慢 我猜你會看到312 (與任何半體面瀏覽器都會顯示的321相反。)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM