Javascript Jquery停止触发事件

Javascript Jquery停止触发事件,javascript,jquery,html,Javascript,Jquery,Html,我有一个简单的场景,如fiddle所示, 最初,事件仅在一个按钮A上绑定,单击手动在两个按钮(A和B)中触发。 现在,在按钮A的事件处理程序中,按钮B的事件处理程序被绑定。预计它不会执行B的回调,因为它是在触发事件后绑定的 但回调仍在执行。我哪里做错了 HTML: 编辑: 我的项目中有这个场景,并且 现在我知道为什么会这样:)但如何阻止事件传播?$(“按钮”)。触发器(“单击”)按按钮在文档标记中出现的顺序在两个按钮上触发单击事件。由于事件冒泡是同步的,.b的事件在该按钮上触发click事件

我有一个简单的场景,如fiddle所示,

最初,事件仅在一个按钮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,以便您可以指定顺序、时间。但是我如何停止事件传播?@ezpura
    e.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");
    }