首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >模拟DOM事件浏览器默认操作的执行

模拟DOM事件浏览器默认操作的执行
EN

Stack Overflow用户
提问于 2013-11-27 12:50:45
回答 1查看 235关注 0票数 1

我有一些通过DOM (createEvent、initEvent、dispatchEvent等)触发/模拟DOM事件的代码。对于大多数DOM事件(如单击),有一个浏览器默认操作,如链接后面。

由于JavaScript代码执行是单线程的,所以当我的代码在批处理中触发多个事件时,我不确定执行流是如何的。所以让我们假设我这样做(伪代码):

代码语言:javascript
复制
for (var i = 0; i < 10; i++) {
  var event = document.body.createEvent('MouseEvent');
  event.initMouseEvent(...);
  document.body.dispatchEvent(event); 
}

会发生什么呢?我的循环是否首先完全执行,然后所有事件都被处理,导致默认浏览器操作触发并注册事件侦听器执行?或者每次调用dispatchEvent以触发默认操作(和事件侦听器)时,代码执行是否中断?

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-11-27 12:59:36

由于JS不是多线程的,所以每次分派事件时,它都会立即触发--实现不会创建一些事件队列,以便在下一个周期启动。

这是旧突变事件被废弃的原因之一。例如,如果将400个元素添加到节点中,它将触发400个变异事件(这会传播),从而减缓几乎所有的事情。

因此,在代码片段中,循环的每一次迭代都将创建鼠标事件,分派鼠标事件,处理鼠标事件的所有侦听器,然后继续执行循环的下一次迭代。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20243009

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档