2

我正在开发一个需要多个复选框值的应用程序。我有包含复选框的嵌套列表。当前的功能是这样的:

  1. 当一个父被选中时,所有的子都被选中。
  2. 选中子项时,未选择父项。

我需要添加这个功能:

  1. 如果在检查父级后取消选中子级,则父级取消选中,但让子级处于选中状态。

    $('input[name="level-1"],input[name="level-2"]').bind('click', function () { $('input[type=checkbox]', $(this).parent('li')).attr('checked', ($(this).is(':checked'))); });

我的代码在这里找到:http: //jsfiddle.net/dbcottam/Py4UN/

4

2 回答 2

2

一个可能的解决方案

然后将一个类添加someclass到最上面的ul元素

$('.someclass :checkbox').bind('click', function () {
    var $chk = $(this), $li = $chk.closest('li'), $ul, $parent ;
    if($li.has('ul')){
        $li.find(':checkbox').not(this).prop('checked', this.checked)
    }

    do{
        $ul = $li.parent();
        $parent = $ul.siblings(':checkbox');
        if($chk.is(':checked')){
            $parent.prop('checked', $ul.has(':checkbox:not(:checked)').length == 0)
        } else {
            $parent.prop('checked', false)
        }
        $chk = $parent;
        $li = $chk.closest('li');
    } while($ul.is(':not(.someclass)'));
});

演示:小提琴

于 2013-08-14T16:47:12.920 回答
0

我尝试了一个通用函数来处理多个级别。请参阅下面的代码,

$('input[name^="level"]').click(function () {
    //v-- Takes care of check/uncheck all child checkbox
    $(this).parent().find('input[name^=level]').prop('checked', this.checked);

    if (!this.checked) {
        var level = this.name.substring(this.name.length - 1);    
        //using the naming convention `level-n` to uncheck parent
        for (var i = level - 1; i > 0; i--) {
            $('input[name="level-' + i + '"]').prop('checked', false);
        }
    }
});

演示:http: //jsfiddle.net/46hTc/

于 2013-08-14T14:09:06.453 回答