Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/471.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 选择父复选框_Javascript_Jquery - Fatal编程技术网

Javascript 选择父复选框

Javascript 选择父复选框,javascript,jquery,Javascript,Jquery,我有一个页面,它有一个树形结构,它没有限制的级别数。每个级别都有一个勾选框,我需要能够让用户勾选他们感兴趣的级别。如果用户单击某个级别,则需要选择该子级的所有父级。此外,如果取消选中父级复选框,则应取消选中所有子级 我试着在下面写代码,哪种代码有效,但是如果我点击孩子,它会勾选父母和祖父母,但不选中孩子。我也无法取消选择项目,因为每次我选择一个框时,它总是再次选择它 我一直在尝试对代码进行修改,并提出了一些想法,但我认为我走错了方向,我想知道是否有更好的解决方案可用于我试图实现的目标。代码如下:

我有一个页面,它有一个树形结构,它没有限制的级别数。每个级别都有一个勾选框,我需要能够让用户勾选他们感兴趣的级别。如果用户单击某个级别,则需要选择该子级的所有父级。此外,如果取消选中父级复选框,则应取消选中所有子级

我试着在下面写代码,哪种代码有效,但是如果我点击孩子,它会勾选父母和祖父母,但不选中孩子。我也无法取消选择项目,因为每次我选择一个框时,它总是再次选择它

我一直在尝试对代码进行修改,并提出了一些想法,但我认为我走错了方向,我想知道是否有更好的解决方案可用于我试图实现的目标。代码如下:

<!DOCTYPE HTML>
<html>
    <head>
        <meta charset="utf-8">
        <title>Check Box</title>
        <script type="text/javascript" src="js/jquery.js"></script>
        <script language="javascript">
            $(document).ready(function () {
                $(".test").click(function (event) {
                    event.preventDefault();
                });
            });

            function set_checked(id, checked) {
                $("#ID_" + id).attr("checked", checked)
                alert(id);
            }

            function CheckMe(id) {
                var IDS = id.replace("ID_", "");
                var IDS = IDS.split('_');
                for (i = 0; i < IDS.length; i++) {
                    set_checked(IDS[i], true);
                }
            }
        </script>
    </head>
    <body>
        <div>
            <form>
                <p>
                    <input name="ID" type="checkbox" id="ID_123" value="123" onClick="CheckMe('ID_123')" class="test">Grandparent
                    <br>
                    <input name="ID" type="checkbox" id="ID_124" value="124" onClick="CheckMe('ID_123_124')"class="test">Parent
                    <br>
                    <input name="ID" type="checkbox" id="ID_125" value="125" onClick="CheckMe('ID_123_124_125')"class="test">Child
                </p>
                <p>
                    <input type="submit" name="button" id="button" value="Submit">
                </p>
            </form>
        </div>
    </body>
</html>

有一些插件已经提供了这个功能

试试这个,因为它正是你想要的

演示:


有些插件已经提供了此功能

试试这个,因为它正是你想要的

演示:


不确定“级别”是什么意思,复选框是嵌套在其他元素中,还是像您的示例中那样,只是兄弟元素

如果示例HTML正确,请删除所有内联JS,然后执行以下操作:

$(".test").on('change', function() {
    var i = $(this).index(),
        c = $(this).is(':checked');
    $(".test").filter(function() { return $(this).index() < i; }).prop('checked', c);
});
$(“.test”).on('change',function()){
var i=$(this).index(),
c=$(this).is(':checked');
$(“.test”).filter(函数(){return$(this.index()

不确定“级别”是什么意思,复选框是嵌套在其他元素中,还是像您的示例中那样,只是兄弟元素

如果示例HTML正确,请删除所有内联JS,然后执行以下操作:

$(".test").on('change', function() {
    var i = $(this).index(),
        c = $(this).is(':checked');
    $(".test").filter(function() { return $(this).index() < i; }).prop('checked', c);
});
$(“.test”).on('change',function()){
var i=$(this).index(),
c=$(this).is(':checked');
$(“.test”).filter(函数(){return$(this.index()
请尝试以下代码:

<!DOCTYPE HTML>
    <html>
    <head>
        <meta charset="utf-8">
        <title>Check Box</title>
        <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js">        </script>
        <script language="javascript">
            $(document).ready(function () {
                $(".test").on('click',function () {
                    var clicked = $(this);
                    var hermanos = clicked.siblings(".test");
                    if(clicked.attr("checked")=="checked")
                        $.each(hermanos, function(index,object){
                            if($(object).val() < clicked.val())
                                    $(object).attr("checked", "checked");

                    });
                else
                    $.each(hermanos, function(index,object){
                        if($(object).val() > clicked.val())
                                $(object).removeAttr("checked");

                    });
            });
        });

    </script>
</head>
<body>
    <div>
        <form>
            <p>
                <input name="ID" type="checkbox" value="123"  class="test">Grandparent
                <br>
                <input name="ID" type="checkbox"  value="124" class="test">Parent
                <br>
                <input name="ID" type="checkbox"  value="125" class="test">Child
            </p>
            <p>
                <input type="submit" name="button" id="button" value="Submit">
            </p>
        </form>
    </div>
</body>

复选框
$(文档).ready(函数(){
$(“.test”)。在('click',函数(){
var clicked=$(这个);
var hermanos=clicked.sides(“.test”);
如果(单击.attr(“选中”)=“选中”)
$.each(hermanos,函数(索引,对象){
if($(object.val()单击.val())
$(对象).removeAttr(“选中”);
});
});
});

祖父母

父母亲
小孩

请尝试以下代码:

<!DOCTYPE HTML>
    <html>
    <head>
        <meta charset="utf-8">
        <title>Check Box</title>
        <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js">        </script>
        <script language="javascript">
            $(document).ready(function () {
                $(".test").on('click',function () {
                    var clicked = $(this);
                    var hermanos = clicked.siblings(".test");
                    if(clicked.attr("checked")=="checked")
                        $.each(hermanos, function(index,object){
                            if($(object).val() < clicked.val())
                                    $(object).attr("checked", "checked");

                    });
                else
                    $.each(hermanos, function(index,object){
                        if($(object).val() > clicked.val())
                                $(object).removeAttr("checked");

                    });
            });
        });

    </script>
</head>
<body>
    <div>
        <form>
            <p>
                <input name="ID" type="checkbox" value="123"  class="test">Grandparent
                <br>
                <input name="ID" type="checkbox"  value="124" class="test">Parent
                <br>
                <input name="ID" type="checkbox"  value="125" class="test">Child
            </p>
            <p>
                <input type="submit" name="button" id="button" value="Submit">
            </p>
        </form>
    </div>
</body>

复选框
$(文档).ready(函数(){
$(“.test”)。在('click',函数(){
var clicked=$(这个);
var hermanos=clicked.sides(“.test”);
如果(单击.attr(“选中”)=“选中”)
$.each(hermanos,函数(索引,对象){
if($(object.val()单击.val())
$(对象).removeAttr(“选中”);
});
});
});

祖父母

父母亲
小孩


您可能需要考虑嵌套<代码> UL><代码> s来构造复选框层次结构,这将允许更简单的操作和演示。您可以考虑嵌套<代码> UL><代码> s来构造复选框层次结构,这将允许更简单的操作和演示。+ 1 jQuery是很棒的,可以做所有的事情。它也很好。+1 jquery很棒,可以做所有事情。我使用的代码示例具有误导性。树中有许多分支,可能有多个“族”。我使用的代码示例具有误导性。树中有许多分支,可能有多个“家族”。