当前位置:  开发笔记 > 编程语言 > 正文

DOM事件优先级

如何解决《DOM事件优先级》经验,为你挑选了2个好方法。

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

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

    onabort - 图像的加载被中断

    onblur - 元素失去焦点

    onchange - 用户更改字段的内容

    onclick - 鼠标单击一个对象

    ondblclick - 鼠标双击一个对象

    onerror - 加载文档或图像时发生错误

    onfocus - 元素获得焦点

    onkeydown - 按下键盘键

    onkeypress - 按下或按住键盘键

    onkeyup - 发布键盘键

    onload - 页面或图像已完成加载

    onmousedown - 按下鼠标按钮

    onmousemove - 移动鼠标

    onmouseout - 鼠标移出元素

    onmouseover - 鼠标移动到元素上

    onmouseup - 释放鼠标按钮

    onreset - 单击重置按钮

    onresize - 调整窗口或框架的大小

    onselect - 选择文本

    onsubmit - 单击提交按钮

    onunload - 用户退出页面

他们从事件队列中处理了什么顺序?

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



1> Shog9..:

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

也就是说,HTML 5草案建议确实尝试指定事件将如何排队和调度 - 事件循环:

要协调事件,用户交互,脚本,呈现,网络等,用户代理必须使用本节中所述的事件循环.

每个用户代理必须至少有一个事件循环,并且每单位相关的类似源浏览上下文最多只有一个事件循环.

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

[...]用户代理可以有一个用于鼠标和键事件的任务队列(用户交互任务源),另一个用于其他任务.然后,用户代理可以在四分之三的时间内为其他任务提供键盘和鼠标事件首选项,保持界面响应但不会使其他任务队列处于饥饿状态,并且从不处理来自任何一个任务源的事件.[...]

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



2> Ricky Boyce..:

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

    鼠标移到

    鼠标移动

    鼠标移开


    鼠标按下

    变化(关注输入)

    模糊(关注元素)

    焦点

    鼠标松开

    点击

    DBLCLICK


    KEYDOWN

    按键

    KEYUP


如果触发“点击”事件,是否还会触发先前的事件(鼠标按下,更改,模糊,聚焦,鼠标上移)?
推荐阅读
携手相约幸福
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有