JavaScript 中的反向事件冒泡

2024-01-11

如您所知,事件通常在 JavaScript 中冒泡,因此首先执行触发事件的元素的事件处理程序,然后调用父元素的事件处理程序,依此类推。这种行为会导致我当前正在处理的项目出现一些问题,我宁愿颠倒执行顺序。

我想出了一个使用超时的解决方案:

$(element).mouseover(function(){
    var that = this;
    setTimeout(function() {
       //actual event handler, but references to "this" are replaced with "that"
    },$(this).parents().length)
 });

所以基本上,事件处理程序在短暂的超时后执行,等待时间取决于 DOM 树中元素的深度: html 元素的事件处理程序立即执行,body 元素的事件处理程序等待 1 毫秒后执行,依此类推。因此事件的执行顺序是相反的。

我的第一次测试结果是积极的,但我仍然不确定这个解决方案是否存在任何问题或缺点。您觉得这个解决方案怎么样?关于如何解决这个问题的其他想法也受到高度赞赏。


反向事件冒泡称为捕获阶段。

See the DOM 事件架构 http://www.w3.org/TR/DOM-Level-3-Events/#dom-event-architecture

Pass true作为第三个参数Event.addEventListener使其在捕获阶段触发

el.addEventListener("click", function () {
  console.log("i run in capture");
}, true);

当然,它不适用于旧平台。您需要一个 DOM3 事件垫片来模拟事件系统。请随时为DOM-shim https://github.com/Raynos/DOM-shim

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JavaScript 中的反向事件冒泡 的相关文章

随机推荐

  • Spring MVC 测试(安全集成测试),JSESSIONID 不存在

    我为我的 Spring Boot 应用程序创建了自定义登录表单 在我的表单集成测试中 我想检查收到的 cookie 是否包含JS会话ID and XSRF 令牌 但是 我只收到了XSRF 令牌 这是我的测试 RunWith SpringJU
  • python/numpy 中的线性组合

    问候 我不确定这是否是一个愚蠢的问题 假设我有 3 个 numpy 数组 A1 A2 A3 和 3 个浮点数 c1 c2 c3 我想评估 B A1 c1 A2 c2 A3 c3 numpy 会计算这个 例如 E1 A1 c1 E2 A2 c
  • 如何更改滚动条拇指的高度?

    有没有办法将滚动条的高度更改为固定高度并相应地更改滚动的内容量 这是我当前的CSS代码 webkit scrollbar width 30px Track webkit scrollbar track box shadow inset 0
  • 在 AES-CTR 模式下正确使用随机数和计数器

    据我了解 在 AES 计数器模式下 我需要使用 128 位随机数 最简单的方法是使用随机 128 位随机数 但我不确定如果将其作为所有随机位传递 算法是否能够正确增加计数器 我认为正确的方法是使用 96 位随机数和从 0 开始的 32 位计
  • 为什么我们使用方括号而不是定义它的括号来调用 vec 宏?

    我正在学习 Rust 宏 并且在使用时对语法感到困惑vec The 源代码 https github com rust lang rust blob 1 35 0 src liballoc macros rs L38 L46实施vec ma
  • 我的 javascript web 工作人员在随机的地方默默地死去。我该如何调试这个?

    网络工作者只是停止 没有错误或任何东西 代码是完全确定性的 但它会在代码的不同点处终止 编辑 问题是我没有维护对我的工人的引用 因此他们在被垃圾收集时似乎随机死亡 问题是我没有维护对我的工人的引用 因此他们在被垃圾收集时似乎随机死亡
  • Pybrain交叉验证方法

    我尝试对我的数据使用交叉验证器 但成功率是 0 0 这没有意义 我的数据由具有 5 个连续属性和两个可能的类别的样本组成 y 和 n My code net pybrain tools shortcuts buildNetwork 5 8
  • 从 Postman 中的对象数组中提取值

    我想从 Postman 中的对象数组中提取 Id 值 然后将其设置为环境变量 如果 JSON 响应是一个对象 则以下脚本可以工作 但不适用于对象数组 我的数组只有一个对象 var data JSON parse responseBody p
  • 有没有办法以编程方式读取 Java 中的 .jmod 文件?

    我用 7 zip 打开了一个 jmod 文件 我可以看到内容 我尝试用 ZipInputStream 以编程方式读取它 但它不起作用 有人知道怎么做吗 中没有文档JEP 261 模块系统 https openjdk java net jep
  • QListView 中的 QT4 QstringListModel

    这是我的第一个 QT 问题 我通常是一名 C 程序员 所以请原谅我问了一个愚蠢的问题 我确信有一个非常简单的答案 但我似乎找不到 我想将项目添加到列表中 目前我们假设它们是字符串 我有一个 QListView UI gt listView
  • volley 库中出现 OutOFMemory 错误

    这就是我正在做的 首先进入自定义适配器的构造函数 我初始化了图像缓存和图像加载器 imageCache new BitmapLruCache mImageLoader new ImageLoader newRequestQueue cont
  • KnockoutJS 使用映射插件订阅属性更改

    无论如何 我可以告诉淘汰映射插件订阅所有属性更改调用某个函数吗 我意识到我可以通过这种方式手动订阅属性更改事件 var viewModel name ko observable foo subscribe manually here vie
  • Spring Security 引起:org.springframework.security.config.annotation.AlreadyBuiltException:该对象已被构建

    在我的 Spring Boot 应用程序中 当我在注入 UserDetailService 实现类的服务层类上添加 PreAuthorize hasAuthority ADMIN 时 出现错误 此对象已构建 如果我应用方法安全性 在任何其他
  • IntelliJ 15 与 QueryDSL 和 Gradle

    我在 IntelliJ 15 中有一个使用 gradle 2 3 和 QueryDSL 4 1 3 的 Spring boot 1 4 项目 该项目无法构建 因为我的实体没有被 Querydsl 构建到 Q 类中 我有以下内容 builds
  • MVC 表单模型为复杂对象集合返回 null

    我有一个包含 4 行 移动设备 工作 单元格 电子邮件 和 5 个以上列的表格 当我发布时 我没有取回任何数据 我可以重构代码以使其正常工作吗 Model public class ContactInfoViewModel public s
  • free() 不释放嵌入式 Linux 中的内存。

    我在嵌入式 Linux 中使用 malloc 分配了内存 大约 10 MB 检查可用内存为 67080 kB 但即使使用 free 释放它后 它仍然保持不变 只有在应用程序终止后 内存才再次可用 free 是否不会使释放的内存可供系统使用
  • mysql 查询 PHP:我想将特定项目放在第一位,然后对其余项目进行排序

    我有下表 id car name owner 1 Toyota Jan 2 Ford Mike 3 Isuzu Andrew 4 BMW Jan 5 Ferrari Steve 6 Audi Jan 7 Benz Klark 8 Hyund
  • 将 MS Sql 结果设置为变量并重用它

    目前我的代码是这样的 select from tblReq where ReqID in select ReqID from tblLog where LogDate gt 2015 04 01 and LogDate lt 2015 05
  • F#(或.NET 库)的统计功能

    从事统计工作的人是否可以用 F 代替他的专业程序 我主要考虑SAS SPSS F 中有对它的本机支持吗 我不是在谈论标准差之类的琐碎事情 而是例如项目响应建模 更新 不要让项目响应模型让你失望 我什至不知道 只是我知道他们使用 SPSS 所
  • JavaScript 中的反向事件冒泡

    如您所知 事件通常在 JavaScript 中冒泡 因此首先执行触发事件的元素的事件处理程序 然后调用父元素的事件处理程序 依此类推 这种行为会导致我当前正在处理的项目出现一些问题 我宁愿颠倒执行顺序 我想出了一个使用超时的解决方案 ele