Javascript 是否创建多个事件对象以响应DOM事件?
有关激发事件的信息是否放置在单个事件对象中,并且每个事件都会覆盖前面事件的任何属性?或者是否为每个事件创建了新对象 根据W3C DOM4,“在整个web平台上,事件被发送到对象以表示发生……”和“事件也是对象并实现事件接口” MDN声明:“每个事件都由一个基于事件接口的对象表示,并且可能有额外的自定义字段和/或函数用于获取有关所发生事件的额外信息。” 此文档“声明”每当触发事件时,都会创建一个对象来表示该事件 这似乎表明基于事件接口的新对象一直在创建 其他来源似乎暗示了一些不同的情况。例如: “在正常程序执行期间,会发生大量事件,因此事件对象是一个相当活跃的对象,不断更改其属性Javascript 是否创建多个事件对象以响应DOM事件?,javascript,dom,Javascript,Dom,有关激发事件的信息是否放置在单个事件对象中,并且每个事件都会覆盖前面事件的任何属性?或者是否为每个事件创建了新对象 根据W3C DOM4,“在整个web平台上,事件被发送到对象以表示发生……”和“事件也是对象并实现事件接口” MDN声明:“每个事件都由一个基于事件接口的对象表示,并且可能有额外的自定义字段和/或函数用于获取有关所发生事件的额外信息。” 此文档“声明”每当触发事件时,都会创建一个对象来表示该事件 这似乎表明基于事件接口的新对象一直在创建 其他来源似乎暗示了一些不同的情况。例如: “
每当触发事件时,计算机都会将有关事件的适当数据放入事件对象中—例如,事件发生时鼠标指针在屏幕上,事件发生时按下了哪些鼠标按钮,以及其他有用的信息。“下面是一个JSFIDLE,探讨您的问题: 至少在Chrome40中,当事件处理程序冒泡时,更改会在事件处理程序之间持续,但当下一个事件触发时,更改将丢失 HTML:
<div id="foo">
<div id="bar">Hello</div>
</div>
<div id="baz">World</div>
下面是一个JSFIDLE来探讨您的问题: 至少在Chrome40中,当事件处理程序冒泡时,更改会在事件处理程序之间持续,但当下一个事件触发时,更改将丢失 HTML:
<div id="foo">
<div id="bar">Hello</div>
</div>
<div id="baz">World</div>
将为事件的每次发生创建一个新的事件对象。换句话说,每次物理鼠标单击都会向
单击处理程序s发送一个全新的事件对象
这里需要认识到的重要一点是,由于多个监听器可能连接到单个元素,一个对象可能被传递到多个函数调用
由于将相同的事件对象传递给每个处理程序函数,因此第二个事件对象将向bar
发出警报 将为每次事件创建一个新的事件对象。换句话说,每次物理鼠标单击都会向单击处理程序s发送一个全新的事件对象
这里需要认识到的重要一点是,由于多个监听器可能连接到单个元素,一个对象可能被传递到多个函数调用
由于将相同的事件对象传递给每个处理程序函数,因此第二个事件对象将向bar
发出警报 单句提问通常是封闭式的。你需要在你的问题上投入更多的精力。谢谢。我尽量简洁。我将编辑这个问题事实上我认为这是一个完全合理的问题,我只是不知道在哪里可以找到正式的答案。FWIW,在当前的Chrome上,你每次都会得到一个新的事件对象。后者可能与非常旧的事件模型有关,你必须在全局窗口中查看。事件对象而不是事件参数,因此,您有时会在一些事件处理程序的顶部看到var event=event | | window.event
。我希望这是一个实现细节,但测试起来应该足够简单。将同一事件绑定到元素及其父元素,修改子处理程序中的事件对象,并查看当事件冒泡时修改是否持续。单句问题通常会结束。你需要在你的问题上投入更多的精力。谢谢。我尽量简洁。我将编辑这个问题事实上我认为这是一个完全合理的问题,我只是不知道在哪里可以找到正式的答案。FWIW,在当前的Chrome上,你每次都会得到一个新的事件对象。后者可能与非常旧的事件模型有关,你必须在全局窗口中查看。事件对象而不是事件参数,因此,您有时会在一些事件处理程序的顶部看到var event=event | | window.event
。我希望这是一个实现细节,但测试起来应该足够简单。将同一事件绑定到元素及其父元素,在子处理程序中修改事件对象,并查看当事件冒泡时修改是否持续。谢谢您的回答。我收到了两个同样正确和有用的答案。但我会接受另一个,因为它是第一个,而作者目前的代表性较少。再次感谢。(我想投赞成票,但我缺少代表…)谢谢你的回答。我收到了两个同样正确和有用的答案。但我会接受另一个,因为它是第一个,而作者目前的代表性较少。再次感谢。(我会投赞成票,但我缺少代表性…)我只测试了单独的事件。我只测试了单独的事件。我只测试了单独的事件。
el.addEventListener('click', function(e) {
e.foo = 'bar';
});
el.addEventListener('click', function(e) {
alert(e.foo);
});