代码之家  ›  专栏  ›  技术社区  ›  ShaneKm

jquery在children/parent中选择/取消选择复选框<li>

  •  0
  • ShaneKm  · 技术社区  · 14 年前

    我有以下几点

    <ul>
       <li>Main
        <ul>
            <li><input type="checkbox" onclick="$.SelectChildren(this);" /> parent 1
               <ul>
                   <li><input type="checkbox" onclick="$.SelectChildren(this);" />sub 1</li>
                   <li><input type="checkbox" onclick="$.SelectChildren(this);" />sub 2
                      <ul>
                         <li><input type="checkbox" onclick="$.SelectChildren(this);" />sub sub 2</li>
                         <li><input type="checkbox" onclick="$.SelectChildren(this);" />sub sub 3</li>
                      </ul>
                    </li>
                </ul> 
            </li>
            <li><input type="checkbox" onclick="$.SelectChildren(this);" />parent 2</li>
        </ul>
       </li>
    </ul>
    

    现在来看我的JQuery函数:

    (function ($) {
        $.SelectChildren = function (element) {
            if ($(element).is(':checked')) {
                $(element).parent().find(':checkbox').attr('checked', true);
            }
            else {
                $(element).parent().find(':checkbox').attr('checked', false);
            }
        }
    })(jQuery);
    

    例如:单击“sub-sub 2”复选框->它也应取消选中“sub 2”和“parent 1”复选框。

    谢谢

    5 回复  |  直到 14 年前
        1
  •  2
  •   Nick Craver    14 年前

    使用 .children() 立即的 儿童)而不是 .find() (下面到处都是) .parents() ,例如:

    (function ($) {
      $.SelectChildren = function (element) {
        $(element).parents().children(':checkbox').attr('checked', element.checked);
      };
    })(jQuery);
    

    .checked 直接的财产。

    You can give it a try here ,获得相同效果的更传统方法如下所示:

    $(function() {
      $(":checkbox").change(function () {
        $(this).parents().children(':checkbox').attr('checked', this.checked);
      });
    });
    

    You can give that version a try here .

        2
  •  0
  •   mrN vbence    14 年前

    将父类标识为“parent”这样的特定类

    那么

    $(".parent").attr("checked", false);
    

    非常简单

        3
  •  0
  •   mkoistinen    14 年前

    $(element).parents(":checkbox").attr('checked', false);
    

    更新。这是错误的,看尼克的解决方案。

        4
  •  0
  •   Ravi Ram    11 年前

    您可以使用此代码允许复选框显示/隐藏childer元素或带有DIV的元素(在本例中是引导组)。

    步骤#1-将类“switch”应用于复选框 确保复选框id已设置

    // -------------------------
    // Checkbox to toggle related input fields
    // Checkbox control class = switch
    // -------------------------
    $('.switch').each(function() {
        var tItems = $(this).attr('id');
        $('.' + tItems).hide();
    });
    // Toggle elements
    // <div class="control-group applied_before <-- checkbox ID">
    $('.switch').change(function () {
        var tItems = $(this).attr('id');
        $('.' + tItems).toggle();
    });
    // -------------------------
    // -------------------------
    
    
    <fieldset>
        <legend>Criminal History</legend>   
        <div class="control-group">
            <input type="checkbox" name="criminal_offender" id="criminal_offender" class="switch" />
            <label>criminal_offender</label>
        </div>
    
        <div class="control-group criminal_offender">
            <label>criminal_offense</label>
            <input type="text" name="criminal_offense" id="criminal_offense" />
        </div>
    
        <div class="control-group criminal_offender">
            <label>criminal_st_code</label>
            <input type="text" name="criminal_st_code" id="criminal_st_code" />
        </div>
    
        <div class="control-group criminal_offender">
            <label>criminal_date</label>
            <input type="text" name="criminal_date" id="criminal_date" />
        </div>
    </fieldset>
    
        5
  •  0
  •   Amit Juneja    11 年前
    <script>  
    
                var checkParent  = function(ref) {
                    return $(ref).parent().parent().parent().children().first();
    
                }
    
               $('input[type="checkbox"]').click(function(){
                    if(this.checked){
                        $(this).parent().children().find('input[type="checkbox"]').attr('checked', true);
                    }
    
                    else {
                        var a = checkParent(this);
                        while(a.length > 0 && a.prop("tagName") == "INPUT" )
                         {
                            a.attr("checked", false);
                            a = checkParent(a);
    
                        }
    
                    }
               });
    
            </script>  
    

    刚刚为一个项目完成了这个算法,我想我会在堆栈流上分享它

    确保所有复选框都在li内,所有li都在ul内,否则这将无法工作

    示例html

    <ul id="a">
            <ul id="b">
                <li id="parentli"><input type="checkbox" id="parent"> Parent
                    <ul id="c">
                         <li><input type="checkbox" id="aa">Child 1</li>
                         <li><input type="checkbox" id="ab">Child 2
                            <ul id="d">
                                 <li><input type="checkbox" id="aba">Child 2-1</li>
                            </ul>
                         </li>
                         <li><input type="checkbox" id="ac">Child 3</li>
                    </ul>
                </li>
            </ul>
    
       </ul>