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

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

  1. onabort - 加载图像是 打断
  2. onblur - 元素失去焦点
  3. onchange - 用户将 字段的内容
  4. onclick - 鼠标单击一个对象
  5. ondblclick - 鼠标双击 对象
  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 - 用户退出页面

它们在事件队列中的处理顺序是什么?

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

有帮助吗?

解决方案

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

那就是 HTML 5草案建议确实试图指定事件将如何排队和分派 - 事件循环

  

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

     

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

     

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

     

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

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

其他提示

对于任何想知道调用相关事件的顺序的人,请参阅下文。到目前为止我只在 Chrome 中进行了测试。

  1. 鼠标移到
  2. 鼠标移动
  3. 鼠标移出

  1. 鼠标按下
  2. 改变(针对重点输入)
  3. 模糊(在聚焦元素上)
  4. 重点
  5. 鼠标向上
  6. 点击
  7. 双击

  1. 按键
  2. 按键
  3. 按键

如果您正在观看鼠标/触摸活动,Patrick H. Lauke已发布讲座关于这个问题。绝对是一个有趣的读物–并处理不同浏览器,不同设备和不同标准的所有怪癖。

他还捆绑了一套全面的测试

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top