我无法阻止JQuery上的按钮单击事件

时间:2013-12-09 23:10:44

标签: javascript 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()函数似乎不起作用。

3 个答案:

答案 0 :(得分: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);
    });

答案 1 :(得分:0)

要禁用按钮,请使用参数prop调用true函数:

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

答案 2 :(得分:0)

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

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

我认为你的结构看起来有点奇怪。您不需要在点击事件中附加点击事件。

只需将它们全部分别附加到document.ready事件上即可。目前它们是嵌套的,然后返回尝试取消您的活动。 dom树可能会被事件嵌套的方式弄糊涂。

希望有所帮助。