Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 是否创建多个事件对象以响应DOM事件?_Javascript_Dom - Fatal编程技术网

Javascript 是否创建多个事件对象以响应DOM事件?

Javascript 是否创建多个事件对象以响应DOM事件?,javascript,dom,Javascript,Dom,有关激发事件的信息是否放置在单个事件对象中,并且每个事件都会覆盖前面事件的任何属性?或者是否为每个事件创建了新对象 根据W3C DOM4,“在整个web平台上,事件被发送到对象以表示发生……”和“事件也是对象并实现事件接口” MDN声明:“每个事件都由一个基于事件接口的对象表示,并且可能有额外的自定义字段和/或函数用于获取有关所发生事件的额外信息。” 此文档“声明”每当触发事件时,都会创建一个对象来表示该事件 这似乎表明基于事件接口的新对象一直在创建 其他来源似乎暗示了一些不同的情况。例如: “

有关激发事件的信息是否放置在单个事件对象中,并且每个事件都会覆盖前面事件的任何属性?或者是否为每个事件创建了新对象

根据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);
});