php - 从 PHP 中提取的目录列表中的 jQuery Prop 父复选框

标签 php javascript jquery

我的目标是“支持”嵌套列表中的父复选框。现在我在 PHP 中拉入一个目录列表,如下所示:

function listDirectories($dir, $i, $howDeep) {
            $lastFolder = end(explode("/", $dir));
            $listString .='<li class="closed"><span class="folder"><input type="checkbox" class="userPermissionCheckBox" parent="'.$i.'" howDeep="'.$howDeep.'" value="'.$dir.'" />'.str_replace('_', ' ', $lastFolder).'</span>';
            foreach (glob($dir."/*", GLOB_ONLYDIR) as $d) {
                $howDeep++;
                $listString .='<ul>';
                $listString .=' '.listDirectories($d, $i, $howDeep).' ';
                $listString .='</ul>';
                $i++;
                $howDeep = 1;
            }
            $listString .='</li>';
            return $listString;
        }

太棒了!,然后我将这个 jquery/js 函数绑定(bind)到复选框,以便在选择父项时“支持”所有子框,如下所示:

 var isAlreadyChecked = $(this).prop('checked');
            $(this).parents(':eq(1)').find('.userPermissionCheckBox').each(function () {
                $(this).prop('checked', isAlreadyChecked);
            });

这也很棒。

我卡住的地方是如果有人要检查子框而不检查父框,它会自动检查父框...所以我尝试了这样的事情:

var isAlreadyChecked = $(this).prop('checked');
             var parentNumber = Number($(this).attr('parent'));
             var howDeepIsNest = Number($(this).attr('howDeep'));
            $(this).parents(':eq(1)').find('.userPermissionCheckBox').each(function () {
                $(this).prop('checked', isAlreadyChecked);
            });
            if(howDeepIsNest > 1){
                var immediateParent = howDeepIsNest - 1;
                $('.userPermissionCheckBox[howDeep='+immediateParent+']').prop('checked', true);
            }

这种工作方式,显然子框的自动 Prop 效果很好,但我无法自动检查父框是否正常工作。我愿意接受任何建议。感谢您花时间阅读本文。

最佳答案

这将:

  • 取消/勾选所有 child
  • 检查所有 parent
  • 如果所有 sibling 也都未选中,则取消选中直接父级

fiddle :http://jsfiddle.net/a7WDk/1/

$('input:checkbox').on('change', function() {
    var $this = $(this),
        $lis = $this.parents('li'),
        $parents = $lis.find('> span > input:checkbox').not(this),
        $children = $lis.eq(0).find('input:checkbox').not(this),
        $related = $lis.eq(0).siblings().find('input:checkbox');

    if($this.is(':checked')) {
        $parents.add($children).attr('checked', 'checked');
    } else {
        if($children.length) {
            $children.removeAttr('checked');
        }

        if($related.length && !$related.is(':checked')) {
            $parents.eq(0).removeAttr('checked').trigger('change');
        }
    }
});

关于php - 从 PHP 中提取的目录列表中的 jQuery Prop 父复选框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18407886/

相关文章:

javascript - 如何将 Qualtrics 中的 javascript 应用于一组项目?

javascript - 函数在jsp页面中不起作用?

php - Powershell 脚本未从 php 运行

php - echo &lt;script&gt; 让我抓狂

php - fatal error : Call to undefined function session_register()

javascript - 向服务器发送请求

javascript - 按自定义顺序对对象数组进行排序

javascript - 使用 AJAX 在 HTML 上显示 PHP

javascript - CDNJS 的 fullcalendar.js 不起作用?

php - session 变量不持久