阻止许多处理程序的条件

时间:2014-08-28 11:47:28

标签: jquery

当条件返回true时,我有许多按钮必须自我阻止。像打击不起作用的东西。怎么做那么优雅?

$('#button1,#button2,#button3').click(function(event){
    if(maintence_mode){
        event.preventDefault(); // alerts can't be shown
    }
}); 

$('#button1').click(function(){
   alert('1');
});

$('#button2').click(function(){
   alert('2');
});

$('#button3').click(function(){
   alert('3');
});

jsfiddle

更新: 我现在有类似下面的内容,但不适用于event.stopImmediatePropagation()。我认为请求/isservicemode需要一些时间......

var checkServiceMode = function(callback) {
    $.get('/isservicemode', function(data){
        callback(data.mode);
    }); 
}

$('#button1,#button2,#button3').click(function(event){
    checkServiceMode(function(modeon){
        if(modeon) {
            event.preventDefault();
            event.stopImmediatePropagation();
            return false;
        }
    });
}); 

4 个答案:

答案 0 :(得分:1)

你可以停止进行传播。 Demo

出于演示目的,我在5秒后将mainence_mode重置为false,以便再次点击。

var maintence_mode = true;  


$('#button1,#button2,#button3').click(function(event){
        if(maintence_mode){
            event.preventDefault(); // alerts can't be shown
            event.stopImmediatePropagation();
            return false;
        }
    }); 
    $('#button1').click(function(){
       alert('1');
    });

    $('#button2').click(function(){
       alert('2');
    });

    $('#button3').click(function(){
       alert('3');
    });

setTimeout(function(){
maintence_mode = false;
},5000);

答案 1 :(得分:0)

var maintence_mode = true;  

$('#button1,#button2,#button3').click(function(event){
        if(maintence_mode){
            event.preventDefault(); // alerts can't be shown
        }
       else{
          alert($(this).text().split("")[1])
        }
}); 

DEMO

答案 2 :(得分:0)

您应该在其他地方管理您的代码:

var maintence_mode = true;  
$('#button1,#button2,#button3').click(function(event){
        if(maintence_mode){
            event.preventDefault(); // alerts can't be shown
        } else{
           $('#button1').click(function(){
       alert('1');
    });

    $('#button2').click(function(){
       alert('2');
    });

    $('#button3').click(function(){
       alert('3');
    }); 
        }
    }); 

答案 3 :(得分:0)

使用事件停止传播功能。

演示:http://jsfiddle.net/e5mkvrjq/

var maintence_mode = true;  
$('#button1,#button2,#button3').click(function(event){
    if(maintence_mode){
        event.stopPropogation(); // alerts can't be shown
    }
}); 

$('#button1').click(function(){
   alert('1');
});

$('#button2').click(function(){
   alert('2');
});

$('#button3').click(function(){
   alert('3');
});