停止按钮点击?

时间:2014-03-06 16:28:53

标签: javascript jquery

我有两种方法

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

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

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

        //do B
    });

当A返回false时,如何阻止'B'发生?

5 个答案:

答案 0 :(得分:2)

var whatDoesAReturn = false;
$('.btn-delete').click(function(){
    if (something) {
        whatDoesAReturn = true;
        return true;
    } else {
        whatDoesAReturn = false;
        return false;
    }
});

$('.btn-delete').click(function(){
    if (!whatDoesAReturn) {
        // Do whatever
    }
});

答案 1 :(得分:2)

使用jquery事件的stopImmediatePropagation。这正是它的用途:

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

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

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

        //do B
    });

答案 2 :(得分:2)

为什么不完全放?

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

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

答案 3 :(得分:1)

如果不是你可以在第一次事件中设置标志的解决方案,你最好制作一个单独的函数并设置条件。

使用单一事件处理程序

$('.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
});

答案 4 :(得分:0)

(以防万一有人想要非jQuery解决方案)。


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

根据spec

  

虽然EventTarget上的所有EventListeners都是保证的   由EventTarget收到的任何事件触发,否   规范是指他们接收的顺序   有关EventTarget上其他EventListeners的事件

然后,一种可能性就是只在一个函数内加入所有处理程序。

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

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

var btn = document.querySelector('.btn-delete');
btn.addEventListener('click', function(e){
    // do A
    if(cond) e.stopPropagation();
}, false);
btn.parentNode.addEventListener('click', function(e){  
    //do B
}, false);