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

问题描述:

在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),所以我相信。

就我所知,这并不是过去明确定义的。不同的浏览器可以自由地实现事件顺序,但他们认为合适。虽然大多数已经足够接近所有的实际用途,但在浏览器有所不同的情况下(并且当然,还有更多的情况下,某些浏览器无法发送特定事件,所有的)都存在并继续存在。

这就是说,HTML 5 draft recommendation确实让企图以指定事件将如何排列和调度 - the event loop

协调事件,用户 互动,脚本,渲染, 网络,等等,用户代理 必须使用本节中的 中所述的事件循环。

必须有至少一个事件循环 每用户代理,和每相关 类似来源的浏览上下文单元至多一个事件 循环。

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

[...]用户代理可能对鼠标和键盘事件(用户 交互任务源),以及另一 其他一切一个任务队列 。用户代理 然后可以给键盘和鼠标 事件优先于其他任务 三个季度的时间,保持 响应接口,但不 使其它任务队列,从不 处理的事件从任何一个任务 源出故障。 [...]

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

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

他还捆绑a comprehensive set of tests

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

  1. 鼠标悬停
  2. 鼠标移动
  3. 鼠标移开

  1. 鼠标按下
  2. 变化(上聚焦的输入)
  3. 模糊(聚焦元件上)
  4. 重点
  5. 鼠标松开
  6. 点击
  7. DBLCLICK

  1. 的keydown
  2. 按键
  3. KEYUP