问题标签 [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.
qt - 将自定义 QEvent 传播到 Qt/PyQt 中的父小部件
拳头,为问题的长度道歉。
我正在尝试将自定义 Qt 事件从子小部件传播到顶级父小部件,以便根据事件类型而不是链接信号触发一些操作。
Qt 文档建议可以传播带有和方法发布的每个事件(意味着每个postEvent()
子accept()
类)。ignore()
QEvent
我试图覆盖customEvents
方法而不是events
但无济于事。
Python
我已经使用 PyQt4(Qt 版本是 4.6)在 Python 中尝试过这个。
在此示例中,仅当事件作为第一个参数Bar.someEventHandler()
发布时才会触发,如下所示:self.parent()
这是可以理解的,因为事件直接传递给接收对象。
C++
C++ 中的类似示例:
foobar.h
foobar.cpp
主文件
与 python 相同,这仅在将事件直接传递给对象时才有效。
也许我错过了重点,是否可能只有 Key 和 Mouse 事件向上传播?
.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 时,我调用:
jquery - 使用 $.get() 时,jQuery 停止点击事件冒泡
我已经为一个按钮分配了一个点击事件,该按钮检索一个不同的 HTML 片段并使用 .html(string) 方法将其注入到一个 DIV 元素中。
Content.html 页面如下:
每次我单击“#btnClose”按钮时,都会显示 HTML 截图内容,但也会触发警报(“测试”)。我试过 stopPropagation(),preventDefault() 并返回 false;并没有喜乐。谁能阐明我做错了什么???
javascript - 如何在不中断 jQuery 中的底层元素事件的情况下禁用对任何鼠标事件的某些元素反应?
我正在尝试制作一个简单的弹出窗口<div>
,旨在在用户拖动鼠标指针时显示鼠标坐标。此弹出窗口出现在鼠标指针右侧的底部。底层有 div
它自己非常重要的鼠标事件处理程序(例如.mousemove()
)。弹出窗口div
离鼠标指针很远(向下约 16 个像素,向右约 16 个像素)。假设用户正在调整某个对象的大小,并且该弹出窗口正在显示该对象的新大小。如果用户正在缓慢调整对象的大小,这是可以的。但是一旦用户突然调整对象的大小并指向弹出窗口div
,底层div
失去焦点,并且负责调整大小的事件处理程序被“破坏”(就像鼠标指针“忘记”底层div
),因为它根本不是为了与覆盖div
-s 合作而设计的。
是否有任何能力抑制任何弹出div
鼠标事件,允许底层div
事件严格连续进行?
我尝试过这样的事情:
它不像我需要的那样工作。有没有人遇到同样的问题?是否可以绕过它?也许,有一个完整的jQuery插件......困惑......
先感谢您。
jquery - jQuery:防止点击队列
在动画完成之前,我需要点击基本上不注册。我试过使用return false
,但这似乎完全杀死了链接。
也尝试过使用$(".image_scroll").stop().animate({"left": "+=300px"}, "slow");
,但这只会使动画结结巴巴并且看起来有问题。
编辑: id#right
在图像上,而不是a
标签上。HTML如下:
javascript - Javascript:如何启用 stopPropagation?
有了object.stopPropagation()
我可以停止事件冒泡,但我怎样才能重新启用它?
js中是否有类似的预定义函数object.startPropagation
?
编辑:
问题是 JS 记得如果你点击“对象”而不是在我不想要它之后总是停止事件冒泡,所以我想停止它:
javascript - GWT:同一个 div 上的两个 DOM 事件,优先级以及在调用第一个事件时如何停用第二个事件?
我有一个 Widget,它有两个 Dom mouseDown 处理程序:
首先,我使用 GWT 进行编码,但我认为问题可能与 Javascript 相关。
此处理程序注册之一是在名为 Resizable 的类中定义的,它允许我的小部件可调整大小。第二个处理程序注册在一个名为 Draggable 的类中定义,它允许我的小部件是可拖动的。
因此,在这两个类的每个构造函数中(在参数中给出小部件),我有:
我想优先考虑我的 dom 事件,以强制首先调用 Resizable 处理程序,并且仅在 Draggable 处理程序之后调用。我怎样才能实现它?
此外,如果调用了可调整大小的处理程序,我想停止事件。我尝试了该event.stopPropagation()
功能,但似乎只能为父母停止该事件,而不能为同一小部件上的类似事件停止。
如果我的小部件可调整大小,如何停止此事件以避免调用可拖动处理程序?
我确切地说这两个类是完全独立的,因为我的小部件可以调整大小但不可拖动,可拖动但不可调整大小或两者兼而有之。所以如果可以的话,我想避免这两个类之间的代码交叉。
谢谢
internet-explorer - jQuery 热键:防止 IE 运行自己的快捷方式,例如 Alt+H
使用 jQuery 热键,我尝试将Alt+ H、Alt+之类的快捷方式绑定C到我网站中的某些特定操作。事件传播在除 IE 之外的所有浏览器中停止(应该如此)。首先,是否有可能实现这一目标?如果是这样,怎么做?
这是一个代码示例:
在 IE 中,该行$this.toggleMenu( 'H' );
被执行,但cancelbubble
似乎没有效果(浏览器打开其“帮助”菜单)
javascript - 事件传播和ajax post
我有以下代码:
div里面的HTML来自外部源,不知道它的结构,无法控制。
单击此链接后,我需要发布一些数据。所以我在 div 元素上添加了一个 onclick 事件处理程序,希望事件能够传播,并使用 jQuery ajax 函数发布数据。
这在除 Safari 之外的所有浏览器中都运行良好 - 它不返回任何错误,调用回调函数但由于某种原因没有到达服务器。每次收到请求时,我都会写入数据库。尝试在浏览器中手动加载帖子网址 - 工作正常并在数据库中创建记录。还尝试了 FF 和 Chrome - 按预期工作。
当将警报放入回调函数时,它会被调用,但在 Safari 中 data = null。
期望 AJAX 在这种情况下工作是否正确?这个问题有更好的解决方案吗?
谢谢!
jquery - FireFox 中的事件传播问题
我正在使用以下代码来防止事件传播:
它适用于 Chrome 和 Safari,但不适用于 Opera 或 Firefox(甚至还没有尝试过 IE!)。FF 萤火虫说 'e' 未定义。我离成为 jquery 大师还差得很远,我不明白为什么 e 是未定义的,但真的是这样吗?我以为 var e正在定义它?
我该如何修复它?
为愚蠢的问题道歉 - 我是自学成才,边走边学。
MTIA