gpt4 book ai didi

javascript - jQuery:无法在窗口和元素上正确绑定(bind)同名的自定义事件

转载 作者:行者123 更新时间:2023-11-28 13:44:00 25 4
gpt4 key购买 nike

我正在尝试在 $(window)$('#slider') 上绑定(bind)具有相同名称的自定义事件。然后我想让窗口事件触发元素事件。

因此,工作流程将是:

1. Bind element event to say `Hello world` f.e.
2. Bind window event to trigger element event
3. Trigger window event

结果:

1. Window event is triggered
2. Element event is triggered

一切看起来都不错,但是一旦触发了窗口事件,整个事情就会陷入疯狂的自调用循环,直到浏览器崩溃。

看起来好像元素事件触发了窗口上的事件。

这是我的代码:

$('#slider').bind('asd', function() {
console.log('asd called on slider');
});
$(window).bind('asd', function() {
console.log('asd called on window');
$('#slider').trigger('asd');
}).trigger('asd');

最佳答案

事件泡沫。在窗口的子窗口上触发事件将导致事件最终到达窗口,除非您停止传播。

解决此问题的一种方法是仅触发处理程序,而不是事件。

$('#slider').bind('asd', function() {
console.log('asd called on slider');
});
$(window).bind('asd', function() {
console.log('asd called on window');
$('#slider').triggerHandler('asd');
}).trigger('asd');

还有另一种方法:

$('#slider').bind('asd', function(e) {
e.stopPropagation();
console.log('asd called on slider');
});
$(window).bind('asd', function() {
console.log('asd called on window');
$('#slider').trigger('asd');
}).trigger('asd');

关于javascript - jQuery:无法在窗口和元素上正确绑定(bind)同名的自定义事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15817755/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com