2008-11-11 50 views
45

在JavaScript中處理事件的優先順序是什麼?JavaScript中的事件優先級是什麼?

下面是按字母順序排列的事件......

  1. onabort - 圖像的加載 中斷
  2. 的onblur - 一個元素失去焦點
  3. 平變化 - 用戶改變 內容一個字段
  4. onclick - 鼠標單擊一個對象
  5. ondblclick - 鼠標雙擊一個 對象
  6. 的onerror - 元素獲得焦點。
  7. 的onkeydown - - 鍵盤按鍵是 按下
  8. onkeypress事件 - 甲鍵盤鍵是 按下或向下保持時 加載文檔或圖像
  9. 的onfocus時發生的錯誤
  10. 的onkeyup - 鍵盤按鍵是 發佈
  11. onload事件 - 一個頁面或圖像 裝完
  12. onmousedown事件 - 甲鼠標按鈕被 按壓
  13. 的OnMouseMove - 鼠標移動
  14. 的onmouseout - 鼠標被移動離開 元件
  15. 的onmouseover - A - 鼠標在一個元件
  16. onmouseup移動 鼠標按鈕被釋放
  17. onreset - 復位按鈕點擊
  18. 在onResize - 窗口或框架是 調整大小
  19. ONSELECT - 文本被選中。
  20. 的onsubmit - 提交按鈕被點擊
  21. onunload的 - 用戶退出頁面

他們在外面事件隊列的處理順序是什麼?

優先順序不是先進先出(FIFO),所以我相信。

回答

32

就我所知,這並不是過去明確定義的。不同的瀏覽器可以自由地實現事件順序,但他們認爲合適。雖然大多數已經足夠接近所有的實際用途,但在瀏覽器有所不同的情況下(並且當然,還有更多的情況下,某些瀏覽器無法發送特定事件,所有的)都存在並繼續存在。

這就是說,HTML 5 draft recommendation確實讓企圖以指定事件將如何排列和調度 - the event loop

協調事件,用戶 互動,腳本,渲染, 網絡,等等,用戶代理 必須使用本節中的 中所述的事件循環。

必須有至少一個事件循環 每用戶代理,和每相關 類似來源的瀏覽上下文單元至多一個事件 循環。

事件循環有一個或多個任務 隊列。任務隊列是有序的 任務列表 當用戶代理要排隊任務時,它必須將給定任務添加到相關事件 循環的任務隊列之一 之一。來自一個 特定任務源的所有任務必須始終將 添加到同一個任務隊列中,但來自不同任務源的 任務可能會被放置在不同的任務隊列中。 [...]

[...]用戶代理可能對鼠標和鍵盤事件(用戶 交互任務源),以及另一 其他一切一個任務隊列 。用戶代理 然後可以給鍵盤和鼠標 事件優先於其他任務 三個季度的時間,保持 響應接口,但不 使其它任務隊列,從不 處理的事件從任何一個任務 源出故障。 [...]

請注意,最後一點:由瀏覽器實施決定哪些事件將按照順序組合在一起並進行處理,以及給予任何特定類型事件的優先級。因此,沒有理由期望所有瀏覽器現在或將來以固定順序分派所有事件。

11

對於任何想知道序列相關事件的人來說,請參見下文。到目前爲止,我只在Chrome中進行過測試。

  1. 鼠標懸停
  2. 鼠標移動
  3. 鼠標移開

  1. 鼠標按下
  2. 變化(上聚焦的輸入)
  3. 模糊(聚焦元件上)
  4. 重點
  5. 鼠標鬆開
  6. 點擊
  7. DBLCLICK

  1. 的keydown
  2. 按鍵
  3. KEYUP