问题标签 [event-bubbling]
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.
javascript - 父元素阻止冒泡时未触发单击事件
我已经在一些现代浏览器中进行了测试,结果不一致。我确信这与捕获与冒泡事件支持差异有关。我已经设置了一个测试环境来在此处复制问题:pastebin并使用此服务运行实时预览。
问题是这样的:当祖先阻止冒泡时,一些浏览器会忽略锚点 href 点击事件。这是没有意义的,因为中间元素会在它冒泡之前触发它的事件,但锚元素不会。为什么 javascript click 事件有效但 href 事件无效?
这是按下“单击我”时的结果:
Chrome 9.0.597.98:href被忽略 + 打印内部和外部
IE 8.0.6001.19019:href有效 + 打印内部和外部
Firefox 3.6.13:忽略 href + 打印内部和外部
所以我的最终问题是:当祖先元素阻止事件冒泡时,如何让 href 跨浏览器工作?任何见解将不胜感激。
编辑:
我只想指出,Pointy 的评论中的讨论仍在继续,我还要感谢他的巨大帮助!
javascript - 如何在委托()中使用 event.stopPropagation()
我的代码在 html 中如下所示:
我使用 deligate() jquery 方法绑定我的元素(因为元素动态出现)
我的问题是,当我点击“.anchor”时,这两个事件都会发生。谁能告诉我如何在这种情况下使用 event.stopPropagation() ?我尝试了上面的方法,但没有工作。有没有其他方法可以做到这一点?
编辑:我尝试调用 event.isPropagationStopped(),它返回 true。但仍然调用了这两个事件。
silverlight - 如何在 Silverlight 用户控件中冒泡事件?
我正在尝试将事件从子用户控件冒泡到其父级。
子用户控件是网格内的一个按钮:
父用户控件由子控件的许多实例组成:
在我定义的子用户控件中:
并且“内部”按钮以这种方式处理点击事件:
我试图检查它发生了什么,我可以看到 Button_Click 被调用,CustomClick 不为空并且它被执行。但是似乎什么也没发生,即使在父用户控件中附加的代码也不会被调用。
有什么建议吗?
在此先感谢,干杯,吉安卢卡。
asp.net - ASP.NET 复合控件不会冒泡事件,但模板会
我正在为 ASP.NET 应用程序开发一个复合控件,并且偶然地最初开发了该控件以使用 ITemplate 创建其子控件。子控件中将有一系列按钮,这些按钮将在根控件中处理。我在按钮上使用带有 CommandName/CommandArgument 属性的 OnBubbleEvent 将其全部连接起来。一切都很好......直到我将模板更改为控件。
当我将模板转换为控件并在我的根控件中调用 Controls.Add(new ChildControl()) 而不是 InstantiateIn(this) 时,事件冒泡不再起作用。
知道为什么吗?
(一切,我的意思是一切,其他都是一样的。)
javascript - 带有jQuery的Javascript:单击并双击相同的元素,不同的效果,一个禁用另一个
我有一个有趣的情况 - 我有一个表格行,当前,当我单击“展开”按钮时,它显示它是隐藏的对应项。包含展开按钮的原始(未隐藏)行在某个单元格中也有一些内容,当单击这些内容时,这些内容变为可编辑的。我想摆脱展开按钮,并通过双击行本身的任何位置来扩展行,包括单击它时变为可编辑的字段。你已经可以闻到这里的麻烦了。
当我双击一行时,在 dblclick 发生之前首先触发两个单击事件。这意味着如果我双击该字段,它将变成一个可编辑的字段,并且该行将展开。我想防止这种情况。我希望双击以防止触发单击,并像往常一样执行单击。
使用 event.stopPropagation() 显然是行不通的,因为它们是两个不同的事件。
有任何想法吗?
编辑(一些半伪代码):
原始版本:
所需版本:
干杯
javascript - 我们将如何测量调用 e.stopPropagation() 是否更高效?
我想衡量e.stopPropagation()
在我不再需要事件传播的时候调用是否更有益(比如几乎 100% 的时间),或者这样做实际上会产生不必要的开销,从而抵消停止传播的任何好处传播到e.stopPropagation()
完全不打电话实际上更有益的程度?
基本上我感兴趣的是, 我将如何测量这种东西?
javascript - Javascript 事件冒泡
我正在制作一个小网站,如果您单击背景,您将获得一个颜色选择器,允许您更改背景颜色。
问题是,由于事件冒泡,无论我点击哪里,这个颜色选择器现在都会出现。我怀疑这里的解决方案是向整个页面上的每个 HTML 元素添加“return false”。我能做些什么呢?
Javascript:
以下是 HTML 外观的概述:
页面布局使得页眉和页脚背景以及相同的颜色和内容是不同的。
单击页眉或页脚并更改该颜色会同时更改,因为该颜色实际上是正文背景。内容只改变内容。
委托解决方案的问题在于,现在根本不再适用。而 stoppropagation 方法基本上是做同样的事情。
我需要打开一些传播,但不是全部。
javascript - HTML DOM:哪些事件不会冒泡?
大多数事件在所有浏览器中都会冒泡。但是,我知道在 Internet Explorer 中“提交”事件不会冒泡。其他没有冒泡的事件是什么?
javascript - 谷歌浏览器取消向上和向下箭头事件
我正在为一个网站制作一个 AutoSuggest 小部件,它的工作方式是当用户在输入文本框中写一些东西时,会显示带有建议的 div,并且用户可以通过鼠标或上下箭头导航它。每个单词都是单独建议的(不像谷歌建议它在整个短语中的位置。
我在使用 Google Chrome 输入框时遇到问题,因为当我按下向上或向下箭头时,浏览器会出现默认行为 - 使用 carret 跳转到文本框的末尾或开头(例如使用 Home 或 End 按钮)。在 Firefox 或 Internet Explorer 上没有这样的效果。我怎么能禁用这个效果?
我从事件处理函数返回“假”,并且还使用了这里的函数http://www.javascripter.net/faq/canceleventbubbling.htm但仍然 carret 在 Chrome 上跳跃...
编辑:在 Safari 上的效果相同...
javascript - jquery事件冒泡
有人可以向我解释为什么
表现得就像他们在自称,即使我这样做
就好像他们在称自己而不是另一个。
编辑
我刚刚意识到我想要完成的是强制它们在加载时运行一次上面的代码有意义吗?