我有2个主要复选框“ ja”和“ nee”。选中其中一个复选框后,将打开一个包含1个或多个复选框的子菜单。这些子复选框也为“ ja”和“ nee”,并响应在maincheckbox中所做的选择。我遇到的问题是,用户可以在主复选框中选择“ nee”,然后将所有子复选框更改为“ ja”,但随后maincheckbox停留在“ nee”,但必须切换到“ ja”复选框。

我这样做是为了使问题仅具有2个复选框,并且仅在它们上面可以具有一个checked属性,并且subcheckbox在称为“ submenu”的div类中。

我认为该问题的解决方案是检查子菜单中是否选中了任何“ nee”类子复选框。如果是,则maincheckbox停留在“ nee”,否则从“ nee” maincheckbox中删除选中的属性,然后将其切换到“ ja”复选框。但是显然我不知道该怎么做。

我制作了小jsFiddle来显示项目:http://jsfiddle.net/B2zs5/

<div>
<p>Heb je DigiD?</p>
                <div class="antwoorden">
                    <input id="ja" type="checkbox" value="ja" class="sub_antwoord ja"/><label for="ja">Ja</label>
                    <input id="nee" type="checkbox" value="nee" class="sub_antwoord nee"/><label for="nee">Nee</label>
                    <div class="extra_info">?
                        <div class="extra_info_popup">
                            Hidden tekst
                        </div>
                    </div>
                </div>
            </div>


这是jQuery代码

    $('.open_sub_ja').click(function () {
    $(this).parents('.container_vragen').find('.ja').attr('checked', this.checked);
    $(this).parents('.container_vragen').find('.nee').removeAttr('checked');
});

$('.open_sub_nee').click(function () {
    $(this).parents('.container_vragen').find('.ja').removeAttr('checked');
    $(this).parents('.container_vragen').find('.nee').attr('checked', this.checked);
});

    $('.ja').click(function () {
        $(this).parents('.antwoorden').find('.ja').attr('checked', this.checked);
        $(this).parents('.antwoorden').find('.nee').removeAttr('checked');
    });

    $('.nee').click(function () {
        $(this).parents('.antwoorden').find('.ja').removeAttr('checked');
        $(this).parents('.antwoorden').find('.nee').attr('checked', this.checked);
    });


如果我猜是这样的话

  if('.nee'.attr('checked')) {
    // do nothing
}
else {
    $('.open_sub_nee').removeAttr('checked');
    $('.open_sub_ja').attr('checked');
}

最佳答案

我猜你想让main nee>所有sub的ja>设置main为ja,反之亦然,以便当1个或更多sub的nee是main ja更改为nee时。

第二点很简单:

$('.nee').click(function () {
    $(this).parents('.antwoorden').find('.ja').removeAttr('checked');
    $(this).parents('.antwoorden').find('.nee').attr('checked', this.checked);

    $(this).parents('.container_vragen').find('.open_sub_ja').removeAttr('checked');
    $(this).parents('.container_vragen').find('.open_sub_nee').attr('checked', this.checked);
});


似乎已将我的修改保存在http://jsfiddle.net/B2zs5/2/

子菜单中的所有复选框ja都会将主nee更改为ja:
http://jsfiddle.net/B2zs5/5/-我使用了Teun的代码和Determine if all checkboxes within jQuery object are checked, return as boolean

$('.ja').click(function () {
    $(this).parents('.antwoorden').find('.ja').attr('checked', this.checked);
    $(this).parents('.antwoorden').find('.nee').removeAttr('checked');

    $group1 = $(this).parents('.submenu').find('.ja');
    if( $group1.filter(':not(:checked)').length === 0){
        //ALL ja checkboxes in submenu checked
        $(this).parents('.container_vragen').find('.open_sub_ja').attr('checked', this.checked);
        $(this).parents('.container_vragen').find('.open_sub_nee').removeAttr('checked');
    }
});

10-06 16:16