问题标签 [event-propagation]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
14 回答
902587 浏览

javascript - event.preventDefault() 与返回 false

当我想在某个事件被触发后阻止其他事件处理程序执行时,我可以使用两种技术之一。我将在示例中使用 jQuery,但这也适用于纯 JS:

1.event.preventDefault()

2.return false

这两种停止事件传播的方法之间有什么显着区别吗?

对我来说,return false;它比执行方法更简单、更短并且可能更不容易出错。使用该方法,您必须记住正确的大小写、括号等。

另外,我必须在回调中定义第一个参数才能调用该方法。也许,有一些原因我应该避免这样做并改用它preventDefault?有什么更好的方法?

0 投票
25 回答
416901 浏览

javascript - 单击子锚点时,如何防止触发父级的 onclick 事件?

我目前正在使用 jQuery 来制作可点击的 div,并且在这个 div 中我也有锚点。我遇到的问题是,当我点击一个锚点时,两个点击事件都在触发(对于 div 和锚点)。单击锚点时,如何防止 div 的 onclick 事件触发?

这是损坏的代码:

JavaScript

HTML

0 投票
2 回答
1194 浏览

javascript - JavaScript:停止事件传播有什么性能优势吗?

停止 JavaScript 事件传播是否被认为是“良好做法” - 它是否以任何方式提高性能?

我想知道在停止传播的布局目的之外是否有好处,这样就不会意外触发多个事件。

0 投票
2 回答
18822 浏览

javascript - Javascript 中的事件传播

如果我有一个嵌套在另一个元素中的元素 (html) 并且它们都附加了一个单击处理程序,则单击内部元素会执行其单击处理程序,然后冒泡到父元素并执行其单击处理程序。我就是这么理解的。

如果没有附加相同的事件,事件是否会在 DOM 树中冒泡?如果是这样,是否值得在每个处理程序的末尾放置一个 event.stopPropagation() 来阻止它并加快速度?

0 投票
1 回答
1053 浏览

javascript - 从分配给正文的按键处理程序中排除表单字段

keypress在分配给 body 元素的网页上有一个处理程序。我真的希望它在网页的任何地方都处于活动状态。或者我是这么想的。文本输入表单中的keypress事件也会激活正文处理程序,这是有道理的,但我不想要。

理想情况下,我想保留keypress分配给 body 元素的处理程序,并以某种方式仅排除输入表单。有什么办法可以在输入级别停止事件并防止它传播到正文?(或者这甚至是查看 HTML DOM 事件的正确方法吗?)

0 投票
2 回答
926 浏览

javascript - 从点击重新分配点击事件(使用jQuery)

我在使用这个 javascript(使用 jQuery)时遇到了一些问题:

当 a 被点击时,它应该重新分配它自己的点击事件。不幸的是,它也会触发第二次点击事件。我知道这与传播有关,但我不知道如何阻止这种行为。

有任何想法吗?

山姆

0 投票
1 回答
1091 浏览

javascript - Javascript 事件冒泡未按预期工作

做噩梦试图弄清楚事件冒泡..

完整的测试用例

据我了解,单击红色边框内的区域应触发所有 3 个事件处理程序(红色、蓝色和正文),仅触发红色和正文。

我试过改变第三个值addEventListener并改变返回值但无济于事,有什么想法吗?

0 投票
2 回答
2119 浏览

javascript - 如何停止传播绑定函数而不是整个事件?

我有一个绑定到许多元素的点击功能。有时这些元素可能位于彼此内部。因此,click 事件绑定到子级,也绑定到其父级。该方法特定于单击的元素。自然,由于事件冒泡,首先触发子事件,然后触发父事件。我不能同时调用它们,因为父母事件会覆盖孩子的事件。所以我可以使用event.stopPropagation()这样只有单击的第一个元素接收事件。问题是元素上还附加了其他点击事件,例如,我在这些元素上使用了 jQuery 的可拖动事件。如果我停止点击事件的传播,那么 draggable 不起作用,并且不会调用以下点击事件。

所以我的问题是:有没有办法阻止事件将调用的方法而不是整个事件的事件冒泡?


辉煌的约翰,但这里有问题:

点击事件绑定到#Elm1#Elm2.Elmchildren宽度和高度均为 100% 。所以他们实际上是当前的目标。

0 投票
1 回答
1120 浏览

jquery - jQuery:优先选择内部点击

我有一个大 div,里面有一些链接,我也想里面有大 div 可点击和链接,我这样做了:

如果我点击可点击 div 内的链接,我首先收到“Hello”警报,然后加载新页面:是否可以在不触发外部 div 点击处理程序的情况下让锚点工作?

0 投票
1 回答
1262 浏览

javascript - 多个按钮的一键式处理程序并停止将事件传播到父级?

由于 ajax 调用,我正在生成一堆“li”项目。他们看着像是:

我可以创建一个单击处理程序,当单击任何一个“li”项“button”元素时将调用该处理程序,并且还会停止将单击事件传播到“li”父级?就像是:

- - - - - - - - - 编辑 - - - - - - - - - - -

另外,我不确定我是否要使用按钮元素,可能会使用可点击的 div 作为按钮来代替 - 相同的技术应该适用于两者,对吧?

谢谢