DOM事件优先级

时间:2008-11-11 21:47:15

标签: javascript javascript-events event-handling dom-events eventqueue

在JavaScript中处理事件的优先顺序是什么?

以下是按字母顺序排列的事件......

  1. onabort - 加载图像是 中断
  2. onblur - 元素失去焦点
  3. onchange - 用户更改 字段的内容
  4. onclick - 鼠标单击对象
  5. ondblclick - 鼠标双击a 对象
  6. onerror - 发生错误时 加载文件或图像
  7. onfocus - 元素获得焦点
  8. onkeydown - 键盘键是 压
  9. onkeypress - 键盘键是 按下或按下
  10. onkeyup - 键盘键是  释放
  11. onload - 页面或图像是  完成加载
  12. onmousedown - 鼠标按钮是  压
  13. onmousemove - 移动鼠标
  14. onmouseout - 鼠标移开  元素
  15. onmouseover - 鼠标移动  在元素上
  16. onmouseup - 鼠标按钮是  释放
  17. onreset - 重置按钮是  点击
  18. onresize - 一个窗口或框架  调整大小
  19. onselect - 选择文字
  20. onsubmit - 提交按钮是  点击
  21. onunload - 用户退出页面
  22. 他们从事件队列中处理了什么顺序?

    优先级不是先进先出(FIFO),所以我相信。

3 个答案:

答案 0 :(得分:34)

据我所知,这不是过去明确定义的。不同的浏览器可以自由地实现事件排序,但他们认为合适。虽然大多数都足够接近所有实际目的,但是一直存在并且仍然存在一些奇怪的边缘情况,其中浏览器有所不同(当然,在某些浏览器无法发送某些事件的情况下更多 )。

尽管如此,HTML 5 draft recommendation确实尝试指定事件将如何排队和发送 - the event loop

  

协调事件,用户   交互,脚本,渲染,   网络,等等,用户代理   必须使用事件循环,如中所述   这部分。

     

必须至少有一个事件循环   每个用户代理,最多一个事件   每单位相关的循环   类似来源的浏览环境。

     

事件循环有一个或多个任务   队列。任务队列是有序的   任务清单[...]   当用户代理要排队任务时,   它必须将给定的任务添加到其中一个   相关事件的任务队列   环。所有任务都来自一个   特定任务源必须始终如一   添加到同一个任务队列,但是   来自不同任务源的任务可能   被放置在不同的任务队列中。   [...]

     

[...]用户代理可以有一个任务队列   用于鼠标和键事件(用户   交互任务源),另一个   其他一切。用户代理   然后可以给键盘和鼠标   事件偏好优于其他任务   四分之三的时间,保持   界面响应但不是   饿死其他任务队列,永远不会   处理来自任何一项任务的事件   来源无序。 [...]

请注意最后一位:由浏览器实现决定哪些事件将按顺序组合在一起并按顺序处理,以及给予任何特定类型事件的优先级。因此,没有理由期望所有浏览器现在或将来以固定顺序发送所有事件。

答案 1 :(得分:16)

对于想要了解调用序列相对事件的人,请参阅下文。到目前为止,我只在Chrome中测试过。

  1. 鼠标悬停
  2. 鼠标移动
  3. 鼠标移开
    1. 鼠标按下
    2. 更改(关注输入)
    3. 模糊(关注元素)
    4. 专注
    5. mouseup
    6. 点击
    7. dblclick
      1. KEYDOWN
      2. 按键
      3. KEYUP

答案 2 :(得分:4)

如果您正在观看鼠标/触摸事件,Patrick H. Lauke已发布a talk on the subject。绝对是一个有趣的阅读 - 并处理不同浏览器,不同设备和不同标准的所有怪癖。

他还捆绑了a comprehensive set of tests