在使用preventDefault之后,为什么我不能用jquery检查一个盒子?

时间:2013-03-21 20:07:20

标签: javascript jquery

以下代码如何解决?我阻止了对事件的默认操作。然后我想检查一下盒子。

HTML

<input type="checkbox" class="checkbox" />

javsacript

$('.checkbox').click( function(e) {
    e.preventDefault();
    // some logic happens... now i may decide to check the box (in this case we want to check it for testing)
    $('.checkbox').prop('checked',true);
});

你会认为点击复选框仍然会勾选方框..但它没有。检查小提琴,看看我的意思。

http://jsfiddle.net/5KDH8/

我也试过使用attr功能而没有任何运气。

3 个答案:

答案 0 :(得分:2)

您必须将设置“checked”属性的代码放在单独的事件循环中:

setTimeout(function() { $('.checkbox').prop('checked', true); }, 1);

在事件处理程序返回后,浏览器或库必须取消设置复选框,因为它会在调用处理程序之前设置它以响应单击

答案 1 :(得分:0)

$('.checkbox').click( function(e) {
    // do some logic that returns true or false
    if (!mylogic) {
        return false;
        // returning false will prevent the checkbox to be checked.
    }
});

答案 2 :(得分:0)

之所以发生这种情况,是因为您使用的是click处理程序。如果将其切换为change处理程序,它将可以正常工作。

$('.checkbox').on('change', function(e) {
    e.preventDefault();
    $('.checkbox').prop('checked',true);
});