使用 JQuery 选中父列表项中的复选框?

发布于 2024-10-11 01:35:41 字数 1145 浏览 3 评论 0原文

我对 Javascript 和 JQuery 是全新的,所以我一直在阅读它,并尝试在检查其中一个子项时检查(并设置为非活动状态)父列表项中的复选框。

如果这没有任何意义,请查看列表结构。

<ul>
    <li><input type="checkbox" name="items[]" value="88712003" id="88712003"  /> Parent 1</li>
    <li><input type="checkbox" name="items[]" value="88712003" id="88712003"  /> Parent 2
        <ul>
            <li><input type="checkbox" name="items[]" value="21312341" id="21312341" /> Child 1</li>
            <li><input type="checkbox" name="items[]" value="21312341" id="21312341" /> Child 2</li>
        </ul>
    </li>
    <li><input type="checkbox" name="items[]" value="88712003" id="88712003"  /> Parent 3</li>
    <li><input type="checkbox" name="items[]" value="88712003" id="88712003"  /> Parent 4</li>
</ul>

如果选中“子项 1”或“子项 2”,我希望检查“父项 2”中的输入并将其设置为非活动状态。我已经开始研究它,但被困在这里:

$(function(){
    $('.child').click(function() {
        $(this).parent().parent().parent().toggle();
    });
});

如你所见,我没有走得太远。任何帮助将不胜感激。

谢谢!

I'm brand new to Javascript and JQuery, so I've been reading up on it and am trying to check (and set inactive) a checkbox in a parent list-item when one of the children are checked.

If this doesn't make any sense, take a look at the list structure.

<ul>
    <li><input type="checkbox" name="items[]" value="88712003" id="88712003"  /> Parent 1</li>
    <li><input type="checkbox" name="items[]" value="88712003" id="88712003"  /> Parent 2
        <ul>
            <li><input type="checkbox" name="items[]" value="21312341" id="21312341" /> Child 1</li>
            <li><input type="checkbox" name="items[]" value="21312341" id="21312341" /> Child 2</li>
        </ul>
    </li>
    <li><input type="checkbox" name="items[]" value="88712003" id="88712003"  /> Parent 3</li>
    <li><input type="checkbox" name="items[]" value="88712003" id="88712003"  /> Parent 4</li>
</ul>

If Child 1 or Child 2 is checked, I want the input in Parent 2 to be checked and set inactive. I've started working on it, but got stuck here:

$(function(){
    $('.child').click(function() {
        $(this).parent().parent().parent().toggle();
    });
});

As you can see, I didn't make it far. Any help would be appreciated.

Thanks!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

夏雨凉 2024-10-18 01:35:41

根据您发布的标记,这将起作用:

$('ul > li ul li > :checkbox').change(function() {
    $(this).parents('li:last')
           .children("input")
           .attr("disabled", this.checked);
});

另请注意:

  • 您有数字 ID 和重复 ID,
    这是无效
  • 您没有任何名为“child”的课程
    在你的文档中。
  • .toggle“显示或隐藏匹配的元素”。它不会切换它们的“禁用”属性。

在这里尝试一下:http://jsfiddle.net/karim79/QfTfr/

Based on your posted markup, this will work:

$('ul > li ul li > :checkbox').change(function() {
    $(this).parents('li:last')
           .children("input")
           .attr("disabled", this.checked);
});

Also note:

  • You have numeric and duplicate IDs,
    which are invalid.
  • You do not have any class named 'child'
    in your document.
  • .toggle "displays or hides matched elements". It does not toggle their 'disabled' property.

Try it here: http://jsfiddle.net/karim79/QfTfr/

岁月静好 2024-10-18 01:35:41

试试这个:

<script type="text/javascript">
$(function(){
    $('li ul input[type=checkbox]').click(function() {
                var that = $(this);
                var parentUL = that.parent().parent();
        var parentChk = parentUL.parent().find("input:first");
                var oneChecked = false;
                parentUL.find("input").each(function(){oneChecked = oneChecked || this.checked;});
                console.log(oneChecked);
                parentChk.attr("checked", oneChecked);
    });
});
</script>

Try this:

<script type="text/javascript">
$(function(){
    $('li ul input[type=checkbox]').click(function() {
                var that = $(this);
                var parentUL = that.parent().parent();
        var parentChk = parentUL.parent().find("input:first");
                var oneChecked = false;
                parentUL.find("input").each(function(){oneChecked = oneChecked || this.checked;});
                console.log(oneChecked);
                parentChk.attr("checked", oneChecked);
    });
});
</script>
空城仅有旧梦在 2024-10-18 01:35:41

.parent() 方法仅返回当前选择器的直接父 DOM 元素。 .parents() 方法将搜索 DOM 树以查找与选择匹配的任何父元素。因此 $(".bar").parents(".foo") 将选择具有类“bar”的任何元素的所有具有类“foo”的父元素。

首先为您的目标父元素提供一个可识别的属性,可以是类,也可以是 id。如果你正在处理 ID,你就不需要parents(),所以使用一个类。

$(".child").click(function(){
  $(this).parents('.parentclass').toggle();
});

the .parent() method returns only the immediate parent DOM element of your current selector. The .parents() method will search up the DOM tree to find any parent elements that match the selection. So $(".bar").parents(".foo") would select for all parent elements with Class "foo" of any elements with class "bar".

First give your target parent element an identifable attribute, either a class or an id. If you were dealing with IDs, you wouldn't need parents(), so use a class.

$(".child").click(function(){
  $(this).parents('.parentclass').toggle();
});
岁月苍老的讽刺 2024-10-18 01:35:41

检查此 fillde

$("input:checkbox + ul input:checkbox").click(function(){
    var $ul = $(this).closest("ul");
    var $parent = $ul.prev("input:checkbox");
    if($ul.find("input:checkbox:checked").length > 0){
        $parent.attr("checked", "checked");
    }else{
        $parent.attr("checked", "");
    }
})

如果您使用元素的 id 属性,您必须确保它在文档中具有唯一的值

Check this fillde

$("input:checkbox + ul input:checkbox").click(function(){
    var $ul = $(this).closest("ul");
    var $parent = $ul.prev("input:checkbox");
    if($ul.find("input:checkbox:checked").length > 0){
        $parent.attr("checked", "checked");
    }else{
        $parent.attr("checked", "");
    }
})

If you are using the id property for elements, you have to make sure that it has a unique value in the document.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文