Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在JQuery中选择子复选框_Javascript_Jquery - Fatal编程技术网

Javascript 在JQuery中选择子复选框

Javascript 在JQuery中选择子复选框,javascript,jquery,Javascript,Jquery,我试图从从API中重新运行的JSON生成一个折叠的复选框树,实际上树的构建很好,但现在我必须在选中父复选框时处理子复选框的选择 我试图使用类似的方法,但选中复选框时调试的方法甚至没有进入该方法 $("#sidebar").on("change", "input[type='checkbox']", function () { $(this).siblings('ul') .find("input[type='checkbox']") .prop('chec

我试图从从API中重新运行的JSON生成一个折叠的复选框树,实际上树的构建很好,但现在我必须在选中父复选框时处理子复选框的选择

我试图使用类似的方法,但选中复选框时调试的方法甚至没有进入该方法

$("#sidebar").on("change", "input[type='checkbox']", function () {
    $(this).siblings('ul')
        .find("input[type='checkbox']")
        .prop('checked', this.checked);
});
生成折叠复选框树的代码如下

var casse = () => {
    var callback = (casse) => {
        var item = []
        $.each(casse, (a, negozio) => {
            const PV = negozio.PV;
            const DS = negozio.DS;
            item.push('<li class="nav-item">')
            item.push('<input type="checkbox" class="check-negozio" value="' + PV + '">')
            item.push('<a class="nav-link collapsed text-truncate" href="#" data-toggle="collapse" data-pv="' + PV + '" data-target="#pv' + PV + '">')
            item.push('<i class="fas fa-store"></i>')
            item.push('<span class="d-none d-sm-inline">' + DS + '</span>')
            item.push('</a>')
            item.push('<div class="collapse" id="pv' + PV + '" aria-expanded="false">')
            item.push('<ul class="flex-column pl-2 nav">')
            $.each(casse[a].CS, (b, cassa) => {
                const CS = cassa.CS;
                if (cassa.OP.length === 0) {
                    item.push('<li class="nav-item">')
                    item.push('<input type="checkbox" class="check-cassa" value="' + CS + '">')
                    item.push('<a class="nav-link py-0" href="#" data-cs="' + PV + CS + '">')
                    item.push('<i class="fas fa-desktop"></i>')
                    item.push('<span>CASSA-' + CS + '</span>')
                    item.push('</a>')
                    item.push('</li>')
                } else {
                    item.push('<li class="nav-item">')
                    item.push('<input type="checkbox" class="check-cassa" value="' + CS + '">')
                    item.push('<a class="nav-link collapsed py-1" href="#" data-toggle="collapse" data-target="#cs' + PV + CS + '" data-cs="' + CS + '">')
                    item.push('<i class="fas fa-desktop"></i>')
                    item.push('<span>CASSA-' + CS + '</span>')
                    item.push('</a>')
                    item.push('<div class="collapse" id="cs' + PV + CS + '" aria-expanded="false">')
                    item.push('<ul class="flex-column nav pl-4">')
                    $.each(cassa.OP, (c, operatori) => {
                        item.push('<li class="nav-item">')
                        item.push('<input type="checkbox" class="check-operatore" value="' + operatori.CODOP + '">')
                        item.push('<a class="nav-link p-1" href="#">')
                        item.push('<i class="far fa-user"></i>')
                        item.push('<span>' + operatori.DESCOP + '</span>')
                        item.push('</a>')
                        item.push('</li>')
                    })
                    item.push('</ul>')
                    item.push('</div>')
                    item.push('</li>')
                }
            })

            item.push('</ul>')
            item.push('</div>')
            item.push('</li>')
        });
        item.push('<hr class="my-auto mt-2" />')
        $('#sidebar').prepend(item.join(""));

    }
    $.get('api/config/', callback);
}
问题可能是,由于复选框是动态生成的,因此on.change处理程序无法连接

如果是这样的话,我如何修复它?有没有更好的方法来处理这样的复选框树

我将使用我尝试使用的jquery方法在JSFIDLE中附加一个生成的折叠复选框树的静态版本。

在具有相同直接父级的同一级别选择器中进行函数搜索,而ul包含在元素中,因此我想您需要将同级“ul”替换为:

$(this).siblings('div').children('ul')