Jquery复选框.prop单击preventDefault行为

时间:2013-04-25 09:55:11

标签: jquery html checkbox onclick onchange

我最近一直在处理许多复选框。 我通过.prevenDefault()点击事件遇到了这个“问题”,我试图为此找到解决方案。 在我的情况下,我希望能够决定是否可以根据其他字段选中/取消选中复选框。有时我甚至不得不在事件发生之前打开一个对话框。 这比听起来更容易听起来......

this jsFiddle中,您可以看到问题是什么以及我是如何解决的(请参阅下面的代码)。大多数答案暗示使用更改而不是单击。但是你不能使用.preventdefault()

$('div').off('change','.wtf').on('change', '.wtf', function(e) {
    //e.preventDefault();
    //return false;
    if($(this).prop('checked') == true) {
        alert('I am true now, but I must stay false');
        $(this).prop('checked', false);
    }
    else {
        alert('I am false now, but I must stay true');
        $(this).prop('checked', true);
    }
});

这是最好的解决方案吗?或者有没有其他方法可以使复选框等待,直到它被允许改变它的状态?

例如:我希望仅当用户通过点击“确定”同意对话框中的消息时才取消选中此复选框。

1 个答案:

答案 0 :(得分:8)

复选框是一种特殊情况,change事件和click可以互相替换,因为change event也会因点击复选框而被解雇。

clickchange之间唯一的重大区别是.preventDefault()的可用性。如果使用除单击之外的任何其他方法更改复选框的值,则更改事件会更好。

在这种情况下,您可以选择自己喜欢的任何一种。一个例子是:Fiddle here

$('input[type="checkbox"]').on('change', function () {
    var ch = $(this), c;
    if (ch.is(':checked')) {
        ch.prop('checked', false);
        c = confirm('Do you?');
        if (c) {
            ch.prop('checked', true);
        }
    } else {
        ch.prop('checked', true);
        c = confirm('Are you sure?');
        if (c) {
            ch.prop('checked', false);
        }
    }
});