问题标签 [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.

0 投票
3 回答
1577 浏览

jquery - 对事件冒泡/捕获和 jQuery 感到困惑

我是 jQuery 的绝对菜鸟,并且在前端开发方面非常糟糕,所以这是我的问题。

使用以下 HTML

以及下面的 jQuery

一键显示两次警报,每次都显示正确的选择文本。通过取消注释 stopImmediatePropagation 来纠正它。

所以我的问题是,如果这是事件冒泡/捕获,由于选择没有文本,只有选项,因此其中一个警报不会是空白的。

还是我认为所有这些工作方式都在错误的轨道上?

谢谢你的时间。

0 投票
1 回答
280 浏览

javascript - 事件处理程序的性能是否取决于子元素的数量

我在一个动态增加行数的表上有一个 mousedown 事件处理程序(现在超过一千,从角度来看应该是无限的),我观察到随着预加载行数的增加,性能下降。事件处理程序的目的很简单——找出点击了哪一行并将其突出显示。

我不知道究竟是什么导致了减速,我不确定它是否是事件处理程序。我只是想知道可能触发 mousedown 气泡的子元素的数量是否会影响附加到单个父元素的事件处理程序的性能?

更新:我在这里想出了一个简单的例子:http: //client.infinity-8.me/table.php ?num=1000 (你可以传递你想要的任何数字),基本上它呈现一个有 num 行的表和有一个附加到父表的事件处理程序。我应该由此得出结论,实际上没有明显的性能下降,这是由子元素的数量引起的。

0 投票
1 回答
510 浏览

wpf - WPF:仅处理来自一个特定内容的冒泡事件

现在我要学习RoutedEvents了。我了解冒泡和隧道效应等等。但是我有一个小问题我不知道如何处理。

我在自己定义的 UserControl 中有一个 ItemsControl (继承 TabItem )。这个 itemsControl 可能是一个 ListBox 或一些尚未决定的选择器(取决于这个解决方案的最佳选择)。

现在,当一个项目被选中时(还不确定最好的选择方法是什么,也许是双击)我需要在包含我的 UserControl 的 TabControl 中捕获事件。值得庆幸的是,当我的 userControl 被放入 XAML 可视化树时,冒泡事件向上流动,事件可以到达 TabControl。但是,我在实现这一点时仍然存在一些问题。

1)假设我将其设置为 MouseDoubleClick 我不希望其他 DoubleClicks (例如在其他选项卡中或 ItemsControlItems 之外)。我想你总是可以检查事件的来源,以确保它是正确的,但我认为这不是正确的方式,它可能会自找麻烦。

2) 如果我将事件设置为 SelectionChanged 并将 ItemsControl 设置为 ListBox,我必须确保 ListBox 本身不会处理它,以便它可以到达 tabControl。我该怎么做?

3) 与 2) 相同,但 TabControl 本身就是一个选择器,所以它会引发它自己的 selectionchange 事件,不是吗。那将如何工作。处理程序会同时从列表框和 TabControl 中抓取吗?

4)不确定我应该使用什么 ItemsControl。如果我只是用它来双击项目然后处理事件不会 ListBox 太多。它具有许多不受欢迎的效果,例如选择等。定义您自己的 ItemsControl 或者使用 ListBox 并覆盖它的一些属性(如选择)会更好(如何做到这一点?)?

5) 事件的来源将是 ItemsContainer 但我不希望项目本身。有一种简单的方法可以访问它不是吗?

6)假设我放置了一个按钮,并且在 DataTemplate 中我不想通过按钮附加对象的 ID 并在处理按钮单击的位置捕获它以识别它是什么项目。是否有一个属性可以做到这一点,还是我必须自己定义它?

7) 这里最好的做法是创建我自己的活动吗?

您对这个问题的看法以及对这里最好采用哪种流程的评论是值得赞赏的。

编辑:决定按要求添加更多信息。

我的目标是什么;当我启动程序时,我有一个 TabControl,里面有 1 个选项卡。此选项卡与其他选项卡的不同之处在于它包含一个对象列表(CompanyModel)。这个列表就是我提到的 ItemsControl。当您按此列表中的一家公司时,会添加一个包含该公司信息的新选项卡。

我的解决方案是创建一个 TabItem 集合作为 TabControl 的源。然后我会在一个单独的 XAML 源文件中定义我的 2 种类型的 TabItems(不知道该怎么称呼它,基本上是添加新的用户控件)。一个是列表出现的初始位置,另一个接受 CompanyModel 作为构造函数参数并显示有关该信息的信息。

虽然我不喜欢单独定义公司列表 tabitem 的想法,但我无法在 tabcontrol 下定义它,因为我只能定义项目或来源,而不是两者。

我已经通过在 List DataTemplate 上放置一个按钮来尝试这个想法,该按钮将所选公司的 Id 冒泡到 TabControl,在那里处理它并使用 CompanyModel 添加一个新的 TabItem。这只是一个尝试它的解决方案,并且存在问题,例如如果我向 CompanyTabs 添加 anpther 按钮,我也会在 TabControl 中抓住它们。

因此,我的问题可以通过找到一种从原始 listTab 中冒泡事件的好方法来解决,或者如果我能够在与 TabControl 相同的位置定义选项卡。

我知道另一种解决方案是将列表与 TabControl 分开,但其他人想看看这是如何产生的,我想了解我将如何做到这一点。

0 投票
1 回答
385 浏览

jquery - JQuery 和事件冒泡......再次

我大致使用以下内容:

正如预期的那样,当我单击“#someElement”时会触发“my_function()”,但警报框会弹出 5 次!!!。

一个快速而明显的解决方案是将 my_function() 的内容放入附加到“#someElement”的 if 控制语句中,但我非常热衷于保留我概述的结构,并且确信有一个简单的这样做的方法。

有任何想法吗?

更新

我最初认为问题出在我的“点击”事件中的函数调用上。不是,我认为问题可能与嵌套的“ajaxComplete”调用有关:

我省略了常量“k”,因为 case 语句使前面示例中的“if”语句无用。上面的代码更好地说明了我遇到的问题。

任何帮助都感激不尽。:)

0 投票
2 回答
61 浏览

javascript - 奇怪的冒泡问题

我不确定为什么会冒泡,但确实如此。想知道是否有人有任何想法?

因此,如果我上传文件,我会在控制台中看到以下内容:

如果我连续第二次这样做:

三次:

等等

我假设如果live()事件冒泡“ go”也会冒泡,但事实并非如此。event.stropPropagation我几乎在提交内部的任何地方都尝试过,并.die()连接到$('#file_upload').die().live(...类似的东西。

有任何想法吗?

PS 这个live()调用只是在一个 jQuery doc load ( $(function(){...});)

0 投票
1 回答
2701 浏览

wpf - 无法在 GridView/ListView (WPF) 内的 TextBox 中输入文本

我在绑定到 viewModel 的 ListView 中有一个 TextBox 和一个 DropDown。虽然组合框工作正常,但我无法在文本框中“输入”任何文本。Backspace/SpaceBar/Ctrl+C/Ctrl+V 工作得很好,但是只要我按下任何字母数字键,它就不会在 TextBox 中显示任何文本。

还使用空的 KeyUp/KeyDown/TextChange 事件处理程序进行了检查。它为所有类型的按键引发 KeyUp/KeyDown 事件,但在按下任何字母数字键时不会触发 TextChange。

请建议是否有人曾经遇到过这个问题。或者,如果有办法调试并找到实际问题。

这是我的 XAML - 后面没有任何代码。

感谢您的关注。

注意:1)我正在从 WinForm 应用程序加载此 WPF 窗口。

2) 问题不在于 textBox 与 viewModel 的绑定。我什至无法编辑在 Text 属性中硬编码的简单文本(如上面的代码)

3)我没有在任何父控件中注册“任何”事件处理程序。

解决方案: 根据@HCL 建议的链接,以下代码解决了我的问题。

0 投票
3 回答
1451 浏览

jquery - 的父级事件冒泡,从 onclick 事件侦听器返回 false

0 投票
2 回答
21820 浏览

jquery - jQuery - 点击 LI,显示/隐藏 UL - 点击 LI:a href,继续显示 UL 并在空白窗口中打开

感谢 SO 的出色贡献者!当您开始了解 jQuery 时,它会更酷。:)

所以我有一个 LI,当单击它时会显示/隐藏一个子 UL。我想做的是能够单击 LI 内的链接,该链接会打开一个空白窗口,但也不会关闭子 UL。空白窗口打开完成

但是,我不确定如何在 LI 上“返回:false”,因此当空白窗口打开时它不会关闭 UL。我希望用户在关闭空白窗口时能够看到他们所在的子 UL。

如果不清楚,请告诉我。

谢谢!

0 投票
3 回答
1157 浏览

javascript - 如何使用事件冒泡取消

我到处寻找关于如何阻止事件冒泡发生的代码,我从 Quirksmode 网站上找到了一个代码,它是这样的:

但我不知道如何以及在哪里使用它。'e' 参数用作什么(或应该作为 'e' 传递什么)?是否要在事件处理程序代码中调用此函数?...ETC?

我需要一些帮助,请有人给我一些提示吗?

基本上我有 4 个元素,它们有一个名为“updateAvailableAttributes()”的“onchange”处理程序,如下所示:

这是 updateAvailableAttributes() 脚本:

我的问题是,如何将 'doSomething(e)' 与 'updateAvailableAttributes()' 结合起来,我已经在 'onchange' 事件处理程序上?

先感谢您。

0 投票
3 回答
14159 浏览

javascript - 捕获点击围绕 iframe 的 div

如何在 iframe 周围的 div 上捕获 click 或 mousedown 事件。我尝试将函数附加到 div 上的单击事件,但由于 iframe 永远不会将事件冒泡到周围的 div,因此永远不会调用该函数。有没有办法可以捕获 div 上的事件,然后将其传播到 iframe 以进行默认操作?