道具('已检查')从未如此

时间:2013-09-20 07:00:54

标签: javascript jquery

我试图将我的假(但美丽)复选框绑定到真实的复选框。最初我可以选择所有这些,但我无法取消选择它们。控制台总是说:无论我点击假复选框多少次都是如此。

$('.checkbox').click(function(){
        if($(this).prev().prev().prop('checked')==true){
            $(this).prev().prev().prop('checked',false);
            console.log($(this).prev().prev().prop('checked'));
            $(this).removeClass('checkbox_checked');
            $(this).addClass('checkbox_clear');
        }
        else {
            $(this).prev().prev().prop('checked',true);
            console.log($(this).prev().prev().prop('checked'));
            $(this).removeClass('checkbox_clear');
            $(this).addClass('checkbox_checked');
            }
    });

任何想法都表示赞赏。

PS:这是html。

<input data-val="true" data-val-required="The isChecked field is required." id="5_1" name="options[1].isChecked" value="true" type="checkbox"> 

<input name="options[1].isChecked" value="false" type="hidden">       

<label class="checkbox" for="5_1">Spring</label>

1 个答案:

答案 0 :(得分:2)

问题是LABEL将复选框设置为true或false。您还将复选框的选中设置为true或false。你不必这样做!让浏览器进行检查!!它总是如此,因为你使它成为现实。

所有那些prev()的东西看起来都很吓人。我个人只会使用id。

$(document).on("click","label.checkbox", function() {
    var label = $(this);
    var isChecked = !$("#" + label.attr("for")).prop("checked");  //does not get checked until after label is fully clicked, hence the !
    label.toggleClass("checked", isChecked);
});

JSFiddle:http://jsfiddle.net/4ZKFS/