嵌套复选框:已检查/未选中父级检查的子项

时间:2014-01-15 11:16:09

标签: javascript jquery list checkbox nested

您好我有一个三层嵌套Checkbox的表单

使用Jquery我需要在检查父级别时检查/取消所有子项...当然,如果至少有一个子项取消选中,则取消选中父级

我尝试但从未成功,这就是为什么我会给你的帮助:)

非常感谢所有

我的HTML代码:

在这里演示:http://jsfiddle.net/SENV8/86/

<fieldset class="floral">
<input type="checkbox" class="familybox cbox">
<label>Level 1</label>
<ul class="valuelist">
    <li>
        <input type="checkbox" class="cbox mainoption">
        <label>Level 2</label>
        <ul class="suboption">
            <li>
                <input type="checkbox" class="cbox">
                <label>Level 3</label>
            </li>
        </ul>
        <ul class="suboption">
            <li>
                <input type="checkbox" class="cbox">
                <label>Level 3</label>
            </li>
        </ul>
    </li>
    <li>
        <input type="checkbox" class="cbox mainoption">
        <label>Level 2</label>
        <ul class="suboption">
            <li>
                <input type="checkbox" class="cbox">
                <label>Level 3</label>
            </li>
        </ul>
        <ul class="suboption">
            <li>
                <input type="checkbox" class="cbox">
                <label>Level 3</label>
            </li>
        </ul>
    </li>
</ul>
</fieldset>

编辑: 我在这里用我的剧本:

$('.familybox').change(function() {
        var getparent = $(this).closest('fieldset').attr('class');

        if($('.'+getparent+' .familybox').is(':checked')){
            $('.'+getparent+' .valuelist input:checkbox').prop('checked', true);
        } else if($('.'+getparent+' .familybox').not(':checked')) {
            $('.'+getparent+' .valuelist input:checkbox').prop('checked', false);
        } 

});

1 个答案:

答案 0 :(得分:3)

参见我已实施您的要求。

需要对我在JSfiddle中做过的HTML进行一些更改。

Total Jquery脚本如下:

<script type="text/javascript">
        $(document).ready(function () {
            $.extend($.expr[':'], {
                unchecked: function (obj) {
                    return ((obj.type == 'checkbox' || obj.type == 'radio') && !$(obj).is(':checked'));
                }
            });

            $(".floral input:checkbox").live('change', function () {
                $(this).next('ul').find('input:checkbox').prop('checked', $(this).prop("checked"));

                for (var i = $('.floral').find('ul').length - 1; i >= 0; i--) {
                    $('.floral').find('ul:eq(' + i + ')').prev('input:checkbox').prop('checked', function () {
                        return $(this).next('ul').find('input:unchecked').length === 0 ? true : false;
                    });
                }
            });
        });
    </script>

要观看现场演示:

JSFiddle