JavaScript中的事件优先级是什么?

在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 – 按下鼠标button
  13. onmousemove – 移动鼠标
  14. onmouseout – 鼠标移出元素
  15. onmouseover – 鼠标移到一个元素上
  16. onmouseup – 释放鼠标button
  17. onreset – 重置button被点击
  18. onresize – 调整窗口或框架的大小
  19. onselect – select文本
  20. onsubmit – 点击提交button
  21. onunload – 用户退出该页面

他们从事件队列中处理什么命令?

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

据我所知,这并不是过去明确定义的。 不同的浏览器可以自由地实现事件顺序,但是他们认为合适。 虽然大多数实际上已经足够接近了,但在浏览器有所不同的情况下(当然还有更多的情况下某些浏览器根本不能发送某些事件),一直存在着一些奇怪的边缘情况。

也就是说, HTML 5草案的build议确实试图指定事件如何排队和分派 – 事件循环 :

为了协调事件,用户交互,脚本,渲染,networking等,用户代理必须使用本节所述的事件循环。

每个用户代理必须至less有一个事件循环,并且每个相关的相似来源浏览上下文最多有一个事件循环。

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

一个用户代理可以有一个用于鼠标和键盘事件的任务队列(用户交互任务源),另一个用于其他任务。 然后,用户代理可以在四分之三的时间内给予键盘和鼠标事件优先于其他任务,保持界面响应,但不会挨饿其他任务队列,并且从不处理来自任何一个任务源的事件。 […]

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

对于任何想知道序列相关事件的人来说,请看下面。 到目前为止,我只在Chrome中进行过testing。

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

  1. 鼠标按下
  2. 改变(在重点input)
  3. 模糊(关注元素)
  4. 焦点
  5. 鼠标松开
  6. 点击
  7. DBLCLICK

  1. KEYDOWN
  2. 按键
  3. KEYUP

如果您正在观看鼠标/触摸事件,Patrick H. Lauke就此发表了一个演讲 。 绝对是一个有趣的阅读 – 并处理所有不同的浏览器,不同的设备和不同的标准的怪癖。

他还捆绑了一套全面的testing 。