2013-12-09 39 views
1

我有一个清除列表的按钮,单击此按钮会显示一个要求验证的对话框(是/否)。我想要的是在清除列表后点击“清除”按钮(点击是)。这里是我的代码:我无法阻止JQuery上的按钮单击事件

$('#clearBtn').click(function() { 
    $('#alert5').show(); 
    $('#bg').show(); 
    $('#Yes').click(function(){ 
     $('.list1').empty(); 
     $('#clearBtn').disable(true); 
     $('#clearBtn').click(function(e){ 
      e.preventDefault(); 
     }); 

     $(".alert").fadeOut(250); 
     $(".alertbg").fadeOut(250); 
    }); 
}); 

preventDefault()函数似乎不工作。

回答

5

首先从未窝事件处理程序。

$('#cleatBtn').click(function() { 
    $('#alert5').show(); 
    $('#bg').show(); 
}); 

$('#Yes').click(function() { 
    $('.list1').empty(); 
    $('#cleatBtn').attr('disabled', true); 
    $(".alert").fadeOut(250); 
    $(".alertbg").fadeOut(250); 
}); 

如果你只是想禁用然后使用以下语法

$('#cleatBtn').attr('disabled', true); 

完全消除。那是不需要最里面的事件。

使用on绑定的事件,如果你想按钮被启用,但是关闭使用off

你多了一个选择是当你按下是一类适用于按钮,并执行事件处理只有当班级不存在时才能使用该代码。

$('#cleatBtn').click(function() { 
     if(!$(this).hasClass('active')) { 
      $('#alert5').show(); 
      $('#bg').show(); 
     } 
    }); 

    $('#Yes').click(function() { 
     $('.list1').empty(); 
     $('#cleatBtn').attr('disabled', true); 
     $('#cleatBtn').addClass('active'); 
     $(".alert").fadeOut(250); 
     $(".alertbg").fadeOut(250); 
    }); 
+0

我应该提到我也想重写禁用按钮的样式。是否可以使用toggleClass('。DisabledBtnStyle')? – AymanKun

+0

@AymanKun ..你可以随时做到这一点。 –

+0

谢谢,你的方法是100%的工作 – AymanKun

0

要在它的参数true禁用按钮,调用prop功能:

$('#cleatBtn').prop("disabled", true); 
0

e.preventDefault();是取消事件的正确方式。一些较旧的浏览器也期望返回类型为false。我认为会导致jQuery调用preventDefault()?

这里有一个很好的答案:What's the effect of adding 'return false' to a click event listener?

我觉得你的结构看起来有点奇怪。您无需在点击事件中附加点击事件。

只需将它们全部分别附加到document.ready事件上即可。目前他们嵌套,然后回去试图取消你的事件。 dom树可能会被事件嵌套的方式所困惑。

希望有所帮助。