繁体   English   中英

选中/取消选中父复选框,如果使用jQuery时所有取消选中/选中事件

[英]check/uncheck parent checkbox if all uncheck/check event on change with jQuery

我有这个树列表,如果选中了parent,我正在检查所有的儿童复选框,等等,一切正常,但是最后一个ul Item 03复选框存在问题 ,需要检查是否选中了所有复选框,然后父复选框应该如果未选中所有复选框,则反之亦然;如果未选中所有父复选框,则取消选中父复选框,例如,基于所有选中/全部未选中状态切换父复选框。

我有一个jsfiddle http://jsfiddle.net/g40e3nyL/

这就是js的样子:

function checks() {
                $('input[type="checkbox"]').on('change', function(){
                    var checkboxes = $(this).parent().next('ul').find('input[type="checkbox"]');

                    var count_checked = checkboxes.filter(":checked").length; 
                    if (count_checked == 0)  {
                        console.log('All checked'); //find parent and uncheck box
                    } else if(count_checked != checkboxes.length) {
                        console.log('');
                    } else {
                        console.log('all childrens unselected'); //find parent and uncheck box
                    }

                    if ($(this)[0].checked == true) {
                        checkboxes.each(function(){
                            $(this).prop('checked', true).attr('checked', 'checked');
                        });
                    } else {
                        checkboxes.each(function(){
                            $(this).prop('checked', false).removeAttr('checked');
                        });
                    };


                });
            } checks();

这是html标记的样子:

    <ul>
                <li>
                    item 01<label for=""><input type="checkbox" checked="checked" /></label>
                    <ul>
                        <li>
                            Item 02<label for=""><input type="checkbox" checked="checked" /></label>
                            <ul>
                                <li>
                                    Item 03<label for=""><input type="checkbox" checked="checked" /></label>
                                    <ul>
                                        <li>
                                            Item 04<label for=""><input type="checkbox" checked="checked" /></label>
                                        </li>
                                        <li>
                                            Item 04<label for=""><input type="checkbox" checked="checked" /></label>
                                        </li>
                                        <li>
                                            Item 04<label for=""><input type="checkbox" checked="checked" /></label>
                                        </li>
                                    </ul>
                                </li>
                                <li>
                                    Item 03<label for=""><input type="checkbox" checked="checked" /></label>
                                </li>
                                <li>
                                    Item 03<label for=""><input type="checkbox" checked="checked" /></label>
                                </li>
                            </ul>
                        </li>
                        <li>
                            Item 02<label for=""><input type="checkbox" checked="checked" /></label>
                            <ul>
                                <li>
                                    Item 03<label for=""><input type="checkbox" checked="checked" /></label>
                                    <ul>
                                        <li>
                                            Item 04<label for=""><input type="checkbox" checked="checked" /></label>
                                        </li>
                                        <li>
                                            Item 04<label for=""><input type="checkbox" checked="checked" /></label>
                                        </li>
                                        <li>
                                            Item 04<label for=""><input type="checkbox" checked="checked" /></label>
                                        </li>
                                    </ul>
                                </li>
                                <li>
                                    Item 03<label for=""><input type="checkbox" checked="checked" /></label>
                                </li>
                                <li>
                                    Item 03<label for=""><input type="checkbox" checked="checked" /></label>
                                </li>
                            </ul>
                        </li>
                        <li>
                            Item 02<label for=""><input type="checkbox" checked="checked" /></label>
                            <ul>
                                <li>
                                    Item 03<label for=""><input type="checkbox" checked="checked" /></label>
                                    <ul>
                                        <li>
                                            Item 04<label for=""><input type="checkbox" checked="checked" /></label>
                                        </li>
                                        <li>
                                            Item 04<label for=""><input type="checkbox" checked="checked" /></label>
                                        </li>
                                        <li>
                                            Item 04<label for=""><input type="checkbox" checked="checked" /></label>
                                        </li>
                                    </ul>
                                </li>
                                <li>
                                    Item 03<label for=""><input type="checkbox" checked="checked" /></label>
                                </li>
                                <li>
                                    Item 03<label for=""><input type="checkbox" checked="checked" /></label>
                                </li>
                            </ul>
                        </li>
                    </ul>
                </li>
                <li>
                    item 02<label for=""><input type="checkbox" checked="checked" /></label>
                    <ul>
                        <li>
                            Item 02<label for=""><input type="checkbox" checked="checked" /></label>
                            <ul>
                                <li>
                                    Item 03<label for=""><input type="checkbox" checked="checked" /></label>
                                    <ul>
                                        <li>
                                            Item 04<label for=""><input type="checkbox" checked="checked" /></label>
                                        </li>
                                        <li>
                                            Item 04<label for=""><input type="checkbox" checked="checked" /></label>
                                        </li>
                                        <li>
                                            Item 04<label for=""><input type="checkbox" checked="checked" /></label>
                                        </li>
                                    </ul>
                                </li>
                                <li>
                                    Item 03<label for=""><input type="checkbox" checked="checked" /></label>
                                </li>
                                <li>
                                    Item 03<label for=""><input type="checkbox" checked="checked" /></label>
                                </li>
                            </ul>
                        </li>
                        <li>
                            Item 02<label for=""><input type="checkbox" checked="checked" /></label>
                            <ul>
                                <li>
                                    Item 03<label for=""><input type="checkbox" checked="checked" /></label>
                                    <ul>
                                        <li>
                                            Item 04<label for=""><input type="checkbox" checked="checked" /></label>
                                        </li>
                                        <li>
                                            Item 04<label for=""><input type="checkbox" checked="checked" /></label>
                                        </li>
                                        <li>
                                            Item 04<label for=""><input type="checkbox" checked="checked" /></label>
                                        </li>
                                    </ul>
                                </li>
                                <li>
                                    Item 03<label for=""><input type="checkbox" checked="checked" /></label>
                                </li>
                                <li>
                                    Item 03<label for=""><input type="checkbox" checked="checked" /></label>
                                </li>
                            </ul>
                        </li>
                        <li>
                            Item 02<label for=""><input type="checkbox" checked="checked" /></label>
                            <ul>
                                <li>
                                    Item 03<label for=""><input type="checkbox" checked="checked" /></label>
                                    <ul>
                                        <li>
                                            Item 04<label for=""><input type="checkbox" checked="checked" /></label>
                                        </li>
                                        <li>
                                            Item 04<label for=""><input type="checkbox" checked="checked" /></label>
                                        </li>
                                        <li>
                                            Item 04<label for=""><input type="checkbox" checked="checked" /></label>
                                        </li>
                                    </ul>
                                </li>
                                <li>
                                    Item 03<label for=""><input type="checkbox" checked="checked" /></label>
                                </li>
                                <li>
                                    Item 03<label for=""><input type="checkbox" checked="checked" /></label>
                                </li>
                            </ul>
                        </li>
                    </ul>
                </li>
                <li>
                    item 03<label for=""><input type="checkbox" checked="checked" /></label>
                    <ul>
                        <li>
                            Item 02<label for=""><input type="checkbox" checked="checked" /></label>
                            <ul>
                                <li>
                                    Item 03<label for=""><input type="checkbox" checked="checked" /></label>
                                    <ul>
                                        <li>
                                            Item 04<label for=""><input type="checkbox" checked="checked" /></label>
                                        </li>
                                        <li>
                                            Item 04<label for=""><input type="checkbox" checked="checked" /></label>
                                        </li>
                                        <li>
                                            Item 04<label for=""><input type="checkbox" checked="checked" /></label>
                                        </li>
                                    </ul>
                                </li>
                                <li>
                                    Item 03<label for=""><input type="checkbox" checked="checked" /></label>
                                </li>
                                <li>
                                    Item 03<label for=""><input type="checkbox" checked="checked" /></label>
                                </li>
                            </ul>
                        </li>
                        <li>
                            Item 02<label for=""><input type="checkbox" checked="checked" /></label>
                            <ul>
                                <li>
                                    Item 03<label for=""><input type="checkbox" checked="checked" /></label>
                                    <ul>
                                        <li>
                                            Item 04<label for=""><input type="checkbox" checked="checked" /></label>
                                        </li>
                                        <li>
                                            Item 04<label for=""><input type="checkbox" checked="checked" /></label>
                                        </li>
                                        <li>
                                            Item 04<label for=""><input type="checkbox" checked="checked" /></label>
                                        </li>
                                    </ul>
                                </li>
                                <li>
                                    Item 03<label for=""><input type="checkbox" checked="checked" /></label>
                                </li>
                                <li>
                                    Item 03<label for=""><input type="checkbox" checked="checked" /></label>
                                </li>
                            </ul>
                        </li>
                        <li>
                            Item 02<label for=""><input type="checkbox" checked="checked" /></label>
                            <ul>
                                <li>
                                    Item 03<label for=""><input type="checkbox" checked="checked" /></label>
                                    <ul>
                                        <li>
                                            Item 04<label for=""><input type="checkbox" checked="checked" /></label>
                                        </li>
                                        <li>
                                            Item 04<label for=""><input type="checkbox" checked="checked" /></label>
                                        </li>
                                        <li>
                                            Item 04<label for=""><input type="checkbox" checked="checked" /></label>
                                        </li>
                                    </ul>
                                </li>
                                <li>
                                    Item 03<label for=""><input type="checkbox" checked="checked" /></label>
                                </li>
                                <li>
                                    Item 03<label for=""><input type="checkbox" checked="checked" /></label>
                                </li>
                            </ul>
                        </li>
                    </ul>
                </li>
            </ul>

像这样吗

    function checks() {
        $('input[type="checkbox"]').on('change', function(){
            var checkboxes = $(this).parent().next('ul').find('input[type="checkbox"]');
            var siblings = $(this).closest('li').siblings().andSelf();
            var siblings_checked_count = siblings.find('> label :checked').size();
            var parent_checkbox = $(this).closest('ul').prev().find(':checkbox');

            console.log(siblings, siblings_checked_count);

            var count_checked = checkboxes.filter(":checked").length; 
            if (count_checked == 0)  {
                console.log('All checked'); //find parent and uncheck box
            } else if(count_checked != checkboxes.length) {
                console.log('');
            } else {
                console.log('all childrens unselected'); //find parent and uncheck box
            }

            if ($(this)[0].checked == true) {
                checkboxes.each(function(){
                    $(this).prop('checked', true).attr('checked', 'checked');
                });
            } else {
                checkboxes.each(function(){
                    $(this).prop('checked', false).removeAttr('checked');
                });
            };

            if (!siblings_checked_count)  {
                parent_checkbox.prop('checked', false).removeAttr('checked');
            }
            else if (siblings_checked_count === siblings.size()) {
                parent_checkbox.prop('checked', true).attr('checked', 'checked');
            }
        });
    }
    checks();

我在http://jsfiddle.net/m8sr515L/分叉了您的jsfiddle。

也许不是最优雅的解决方案,但它可以工作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM