问题标签 [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 投票
3 回答
10044 浏览

qt - 将自定义 QEvent 传播到 Qt/PyQt 中的父小部件

拳头,为问题的长度道歉。

我正在尝试将自定义 Qt 事件从子小部件传播到顶级父小部件,以便根据事件类型而不是链接信号触发一些操作。

Qt 文档建议可以传播带有和方法发布的每个事件(意味着每个postEvent()accept()类)。ignore()QEvent

我试图覆盖customEvents方法而不是events但无济于事。

Python

我已经使用 PyQt4(Qt 版本是 4.6)在 Python 中尝试过这个。

在此示例中,仅当事件作为第一个参数Bar.someEventHandler()发布时才会触发,如下所示:self.parent()

这是可以理解的,因为事件直接传递给接收对象。

C++

C++ 中的类似示例:

foob​​ar.h

foob​​ar.cpp

主文件

与 python 相同,这仅在将事件直接传递给对象时才有效。

也许我错过了重点,是否可能只有 Key 和 Mouse 事件向上传播?

0 投票
2 回答
123 浏览

.net - 在基于集合的项目中传播事件

我在 .NET 4 中有一个基于集合的项目。我的意思是,我有一个主集合,称之为“系统”,它由框架组成,每个框架都由卡片组成,卡片依次制作频道。所以,它看起来像 System->Frame->Card->Channel。所有这些都表示为对象,并且它们之间存在父子关系。本质上,Channel 只暴露给 Card,Card 只暴露给 Frame,Frame 只暴露给 System。

理想情况下,我希望仅将 System 类中的方法公开给外界。但是,在 Channel、Card 和 Frame 类中会发生一些关键事件。目前,我处理它们的方式是通过传播。假设 Channel 中发生了一个事件。此事件首先在 Card 中引发,然后在 Frame 中引发,最后在 System 中引发。您可以看到这是如何产生大量代码的。但我主要关心的不是代码,而是性能。

你认为这种传播会严重影响我的表现吗?有没有办法让它更有效率?我还有什么其他选择?我的收藏比较少。System 为 1,Frames < 16,Cards < 256,Channels < 8192。大部分数据存储在 Channel 类中,其中只有原始对象。

编辑

这是我在 Card 中针对 Channel 引发的事件的代码:

当我在 Card 类中将 Channel 添加到 Card 时,我调用:

0 投票
1 回答
205 浏览

jquery - 使用 $.get() 时,jQuery 停止点击事件冒泡

我已经为一个按钮分配了一个点击事件,该按钮检索一个不同的 HTML 片段并使用 .html(string) 方法将其注入到一个 DIV 元素中。

Content.html 页面如下:

每次我单击“#btnClose”按钮时,都会显示 HTML 截图内容,但也会触发警报(“测试”)。我试过 stopPropagation(),preventDefault() 并返回 false;并没有喜乐。谁能阐明我做错了什么???

0 投票
1 回答
996 浏览

javascript - 如何在不中断 jQuery 中的底层元素事件的情况下禁用对任何鼠标事件的某些元素反应?

我正在尝试制作一个简单的弹出窗口<div>,旨在在用户拖动鼠标指针时显示鼠标坐标。此弹出窗口出现在鼠标指针右侧的底部。底层 div它自己非常重要的鼠标事件处理程序(例如.mousemove())。弹出窗口div离鼠标指针很远(向下约 16 个像素,向右约 16 个像素)。假设用户正在调整某个对象的大小,并且该弹出窗口正在显示该对象的新大小。如果用户正在缓慢调整对象的大小,这是可以的。但是一旦用户突然调整对象的大小并指向弹出窗口div,底层div失去焦点,并且负责调整大小的事件处理程序被“破坏”(就像鼠标指针“忘记”底层div),因为它根本不是为了与覆盖div-s 合作而设计的。

是否有任何能力抑制任何弹出div鼠标事件,允许底层div事件严格连续进行?

我尝试过这样的事情:

它不像我需要的那样工作。有没有人遇到同样的问题?是否可以绕过它?也许,有一个完整的jQuery插件......困惑......

先感谢您。

0 投票
4 回答
1728 浏览

jquery - jQuery:防止点击队列

在动画完成之前,我需要点击基本上不注册。我试过使用return false,但这似乎完全杀死了链接。

也尝试过使用$(".image_scroll").stop().animate({"left": "+=300px"}, "slow");,但这只会使动画结结巴巴并且看起来有问题。

编辑: id#right在图像上,而不是a标签上。HTML如下:

0 投票
1 回答
49865 浏览

javascript - Javascript:如何启用 stopPropagation?

有了object.stopPropagation()我可以停止事件冒泡,但我怎样才能重新启用它?

js中是否有类似的预定义函数object.startPropagation

编辑:

问题是 JS 记得如果你点击“对象”而不是在我不想要它之后总是停止事件冒泡,所以我想停止它:

0 投票
1 回答
609 浏览

javascript - GWT:同一个 div 上的两个 DOM 事件,优先级以及在调用第一个事件时如何停用第二个事件?

我有一个 Widget,它有两个 Dom mouseDown 处理程序:

首先,我使用 GWT 进行编码,但我认为问题可能与 Javascript 相关。

此处理程序注册之一是在名为 Resizable 的类中定义的,它允许我的小部件可调整大小。第二个处理程序注册在一个名为 Draggable 的类中定义,它允许我的小部件是可拖动的。

因此,在这两个类的每个构造函数中(在参数中给出小部件),我有:

我想优先考虑我的 dom 事件,以强制首先调用 Resizable 处理程序,并且仅在 Draggable 处理程序之后调用。我怎样才能实现它?

此外,如果调用了可调整大小的处理程序,我想停止事件。我尝试了该event.stopPropagation()功能,但似乎只能为父母停止该事件,而不能为同一小部件​​上的类似事件停止。

如果我的小部件可调整大小,如何停止此事件以避免调用可拖动处理程序?

我确切地说这两个类是完全独立的,因为我的小部件可以调整大小但不可拖动,可拖动但不可调整大小或两者兼而有之。所以如果可以的话,我想避免这两个类之间的代码交叉。

谢谢

0 投票
1 回答
2126 浏览

internet-explorer - jQuery 热键:防止 IE 运行自己的快捷方式,例如 Alt+H

使用 jQuery 热键,我尝试将Alt+ HAlt+之类的快捷方式绑定C到我网站中的某些特定操作。事件传播在除 IE 之外的所有浏览器中停止(应该如此)。首先,是否有可能实现这一目标?如果是这样,怎么做?

这是一个代码示例:

在 IE 中,该行$this.toggleMenu( 'H' );被执行,但cancelbubble似乎没有效果(浏览器打开其“帮助”菜单)

0 投票
2 回答
1697 浏览

javascript - 事件传播和ajax post

我有以下代码:

div里面的HTML来自外部源,不知道它的结构,无法控制。

单击此链接后,我需要发布一些数据。所以我在 div 元素上添加了一个 onclick 事件处理程序,希望事件能够传播,并使用 jQuery ajax 函数发布数据。

这在除 Safari 之外的所有浏览器中都运行良好 - 它不返回任何错误,调用回调函数但由于某种原因没有到达服务器。每次收到请求时,我都会写入数据库。尝试在浏览器中手动加载帖子网址 - 工作正常并在数据库中创建记录。还尝试了 FF 和 Chrome - 按预期工作。

当将警报放入回调函数时,它会被调用,但在 Safari 中 data = null。

期望 AJAX 在这种情况下工作是否正确?这个问题有更好的解决方案吗?

谢谢!

0 投票
2 回答
2817 浏览

jquery - FireFox 中的事件传播问题

我正在使用以下代码来防止事件传播:

它适用于 Chrome 和 Safari,但不适用于 Opera 或 Firefox(甚至还没有尝试过 IE!)。FF 萤火虫说 'e' 未定义。我离成为 jquery 大师还差得很远,我不明白为什么 e 是未定义的,但真的是这样吗?我以为 var e正在定义它?

我该如何修复它?

为愚蠢的问题道歉 - 我是自学成才,边走边学。

MTIA