Javascript 停止按钮点击?

Javascript 停止按钮点击?,javascript,jquery,Javascript,Jquery,我有两种方法 $('.btn-delete').click(function(){ //do A //return false? }); $('.btn-delete').click(function(){ //do B }); 当A返回false时,如何阻止“B”的发生?如果不是解决方案,您最好创建一个函数并将条件置于处理状态,您可以在第一个事件中设置标志 使用单个事件处理程序 $('.btn-delete').click

我有两种方法

$('.btn-delete').click(function(){

        //do A
        //return false?
    });

$('.btn-delete').click(function(){

        //do B
    });

当A返回false时,如何阻止“B”的发生?

如果不是解决方案,您最好创建一个函数并将条件置于处理状态,您可以在第一个事件中设置标志

使用单个事件处理程序

$('.btn-delete').click(function(){

    //do A
    if(condition != false)
        execute code of second event.
    //return false?

});
使用标志

flag = true;
$('.btn-delete').click(function(){    
        //do A
        if (something) {
           flag = true;
        else
           flag = false;
    return flag;  
 });

$('.btn-delete').click(function(){
        if(!flag) return;
        //do B
});

您最好创建一个函数并放置要处理的条件,如果这不是您可以在第一个事件中设置标志的解决方案

使用单个事件处理程序

$('.btn-delete').click(function(){

    //do A
    if(condition != false)
        execute code of second event.
    //return false?

});
使用标志

flag = true;
$('.btn-delete').click(function(){    
        //do A
        if (something) {
           flag = true;
        else
           flag = false;
    return flag;  
 });

$('.btn-delete').click(function(){
        if(!flag) return;
        //do B
});
使用jquery事件的。这正是它的用途:

$('.btn-delete').click(function(e){

        //do A
        if (a is returning false) 
          e.stopImmediatePropagation();
    });

$('.btn-delete').click(function(){

        //do B
    });
使用jquery事件的。这正是它的用途:

$('.btn-delete').click(function(e){

        //do A
        if (a is returning false) 
          e.stopImmediatePropagation();
    });

$('.btn-delete').click(function(){

        //do B
    });

为什么不放在一起呢

$('.btn-delete').click(function(){

    //do A
    // if true do B
});

为什么不放在一起呢

$('.btn-delete').click(function(){

    //do A
    // if true do B
});
以防有人想要非jQuery解决方案

这不能直接在普通JavaScript中完成,因为您无法确定事件侦听器的触发顺序

据报道,

尽管EventTarget上的所有EventListener都保证 由该EventTarget接收的任何事件触发,否 规定了他们接收订单的顺序 与EventTarget上的其他EventListener相关的事件

然后,一种可能性是只在一个函数中连接所有处理程序

但如果不可能,您可以将事件委派给包装器,并在必要时停止传播:

<div class="btn-wrapper"><button class="btn-delete">Delete</button></div>
以防有人想要非jQuery解决方案

这不能直接在普通JavaScript中完成,因为您无法确定事件侦听器的触发顺序

据报道,

尽管EventTarget上的所有EventListener都保证 由该EventTarget接收的任何事件触发,否 规定了他们接收订单的顺序 与EventTarget上的其他EventListener相关的事件

然后,一种可能性是只在一个函数中连接所有处理程序

但如果不可能,您可以将事件委派给包装器,并在必要时停止传播:

<div class="btn-wrapper"><button class="btn-delete">Delete</button></div>

只要您按照正确的顺序绑定它们,就可以在返回false之前使用e.stopImmediatePropagation,只要您将参数e作为事件包含在内。参考:这个答案提供了一个更好的解决方案-你有两个处理器的原因吗?并且不能合并?只要您按照正确的顺序绑定它们,就可以在返回false之前使用e.stopImmediatePropagation,只要您将参数e作为事件包含在内。参考:这个答案提供了一个更好的解决方案-你有两个处理器的原因吗?不能合并?我个人不喜欢这种方法。6个月后,当你回来时,有点难以理解发生了什么。@LuckySoni然后在评论中说不允许其他处理程序执行。你不能查一下stopImmediatePropagation是做什么的吗?那真是太好了-explanatory@Ian是的,对,但这还是有点限制。如果我计划以后再添加更多处理程序该怎么办。。我应该回去重新修改代码吗?要想弄清楚为什么我的其他处理程序不起作用需要时间。。如果这是一个小项目,那么这可能会很好,否则我不认为这是一个好的解决方案。我个人不喜欢这种方法。6个月后,当你回来时,有点难以理解发生了什么。@LuckySoni然后在评论中说不允许其他处理程序执行。你不能查一下stopImmediatePropagation是做什么的吗?那真是太好了-explanatory@Ian是的,对,但这还是有点限制。如果我计划以后再添加更多处理程序该怎么办。。我应该回去重新修改代码吗?要想弄清楚为什么我的其他处理程序不起作用需要时间。。若这是一个小项目,那个么这可能会很好地工作,否则我认为这不是一个好的解决方案。在第二种情况下,不要忘记在第二个函数中再次将flag设置为true,为下一次迭代准备页面。按钮可以点击几次!在第二种情况下,不要忘记在第二个函数中将flag再次设置为true,以便为下一次迭代准备页面。按钮可以点击几次!