Javascript Jquery停止触发事件
我有一个简单的场景,如fiddle所示,Javascript Jquery停止触发事件,javascript,jquery,html,Javascript,Jquery,Html,我有一个简单的场景,如fiddle所示, 最初,事件仅在一个按钮A上绑定,单击手动在两个按钮(A和B)中触发。 现在,在按钮A的事件处理程序中,按钮B的事件处理程序被绑定。预计它不会执行B的回调,因为它是在触发事件后绑定的 但回调仍在执行。我哪里做错了 HTML: 编辑: 我的项目中有这个场景,并且 现在我知道为什么会这样:)但如何阻止事件传播?$(“按钮”)。触发器(“单击”)按按钮在文档标记中出现的顺序在两个按钮上触发单击事件。由于事件冒泡是同步的,.b的事件在该按钮上触发click事件
最初,事件仅在一个按钮A上绑定,
单击
手动在两个按钮(A和B)中触发。
现在,在按钮A的事件处理程序中,按钮B的事件处理程序被绑定。预计它不会执行B的回调,因为它是在触发事件后绑定的 但回调仍在执行。我哪里做错了 HTML: 编辑:
我的项目中有这个场景,并且
现在我知道为什么会这样:)但如何阻止事件传播?
$(“按钮”)。触发器(“单击”)代码>按按钮在文档标记中出现的顺序在两个按钮上触发单击事件。由于事件冒泡是同步的,.b
的事件在该按钮上触发click事件之前被绑定。以下是分类:
$(“按钮”)
创建按钮.a
和按钮.b
的集合
.trigger('click')代码>遍历集合中的每个按钮并生成一个单击事件
按钮。a
接收单击事件,并在页面加载时运行为其注册的事件处理程序
.b
的事件处理程序在.a
的事件处理程序的回调中注册
按钮.b
从.trigger('click')接收单击事件代码>因为它是集合中的第二个
按钮.b
的事件侦听器回调将触发弹出警报
由于您只想触发要单击的按钮.a
,因此以下任何操作都适用于当前文档:
$('.a')。触发器('click')代码>
$('button.a')。触发器('click')代码>(尽管这是多余的)
$('button')。获取(0)。触发('click')代码>(因为.a
是第0个索引按钮元素)
编辑虽然这与问题无关,但您可能打算只为.b
注册一次事件,执行以下操作:
$('.a').one('click',函数(e){
$(函数(){
$('.a').one('click',函数(e){
e、 预防默认值();
$('div')。在('click','.b',function()上{
警惕(“看不见我”);
});
});
$('.a')。触发器('click');
});
按钮A
按钮B
这是因为$(“按钮”)。触发器('click');
这会触发对每个按钮的单击-首先单击.a
,这会将单击处理程序绑定到.b
,然后单击.b
在我的实验中,首先简单地按下按钮.b
就解决了这个问题,但我不相信这一点。这可能是因为所有按钮实例上的点击都是连续触发的
按钮a
单击首先执行…在其回调中绑定按钮b
单击回调
…然后…按钮b
单击执行…因此执行对b的回调
所有这些都发生在一次调用中:$('button')。trigger('click');
编辑:在我之前,其他人可能已经回答了这个问题……但是要迭代触发对正确元素的单击:
$('.a').trigger('click');
执行顺序为:
- 绑定
- 触发第一个按钮(例如,a)
- a:绑定b的回调
- 触发第二个按钮(b)
- b的回拨
即使是$(“按钮”).trigger(“单击”)
也是一条单行线,它是一种循环,就像:
var buttonElms = $("button");
for (var index in buttonElms) {
buttonElms[index].trigger("click");
}
不要使用$('button').trigger()
使用$('button.a').trigger('click');
如果手动触发事件,为什么期望事件不会触发?$('button').trigger('click'));
您正在触发按钮上的事件。因此,它将事件绑定到类“a”和“b”,并触发页面加载上所有按钮标记的事件。您可以执行$('.a')。触发器('click');但为什么要将事件绑定到另一个事件中的div。它会多次绑定同一事件(与您单击a的次数相同)?@ShaunakD这是一个示例,我遇到了一个事件在两个元素上都被触发的情况。同意,但在执行回调后如何停止触发B?逐个触发ELM,以便您可以指定顺序、时间。但是我如何停止事件传播?@ezpurae.stopPropagation()
但如何阻止事件传播?@ezpura您可以通过调用e.stopPropagation();
或e.stopImmediatePropagation();
来阻止事件传播,但这无关紧要,因为$('button')。trigger('click'));
创建两个独立的事件。您不能在第一个事件的回调中停止第二个事件。@ezpura我添加了第二个示例来停止传播,但如何停止事件传播?事件没有传播,存在多个事件。
$('.a').trigger('click');
var buttonElms = $("button");
for (var index in buttonElms) {
buttonElms[index].trigger("click");
}