父母和子女复选框

时间:2011-03-01 13:29:04

标签: javascript jquery

  <div id="customerServices">
        <input id="s9" type="checkbox" /> Parent element<br/>
            <input id="s15" class="parent-s9" type="checkbox" /> Child element<br/>
            <input id="s16" class="parent-s9" type="checkbox" /> Child element<br/>
        <br/><br/><br/>

         <input id="s10" type="checkbox" /> Parent element2<br/>
            <input id="s151" class="parent-s10" type="checkbox" /> Child element2<br/>
            <input id="s161" class="parent-s10" type="checkbox" /> Child element2<br/>
          <br/><br/><br/>

           <input id="s101" type="checkbox" /> Parent element3<br/>
           <input id="s102" type="checkbox" /> Parent element4<br/>
     </div>

页面上有一些复选框。我需要:

  1. 检查所有孩子是否已选中父母。
  2. 如果未选中所有子项,请取消选中父级。
  3. 如果至少检查了一个孩子,请检查父母。
  4. 这是一些代码,但它不起作用

      $('input[type=checkbox]').change(function() {
            var id = $(this).attr('id');
            var children = $('.parent-' + id);
    
    
            //Is this a child
            if (children.length)
            {
               //Is it checked
                 if ($(this).is(':checked'))
                 {
                     //Find the parent
                     var className = $(this).attr('class');
                     var pId = className.replace("parent-","");
    
                     //If the parent is not checked, then check this parent
                     if (!$(pId).is(':checked'))
                         $(pId).attr('checked','checked');
                 }
    
                //Is it NOT checked
                else{
                    //Do other childs are not checked too?
                   //var className2 = $(this).attr('class');
                    //$(className2)
                }
            }
            //If this is a parent, then check all childs
            esle{ 
                children.attr('checked', $(this).attr('checked'));
    
            }
    
    
         });
    

3 个答案:

答案 0 :(得分:5)

我在这里为您编写代码:http://jsfiddle.net/PUWZX/4/

答案 1 :(得分:0)

我没有检查您的所有脚本,但请先告诉我您是否将此代码放入

$(document).ready(function() {
....
});

如果jquery在你的页面上有效吗?

答案 2 :(得分:0)

试试这个,http://jsfiddle.net/erick/dd6Qr/

// 1. Check all  childs  if  parent is checked
$("#s9").change(function(){
    if($(this).is(':checked')) {
        var cls = '.parent-' + $(this).attr('id');
        $(cls).attr('checked', true);  
    }
});

$('input[class*="parent"]').change(function(){
    var cls = '.' + $(this).attr('class') + ':checked';
    var len = $(cls).length;
    var parent_id = '#' + $(this).attr('class').split('-')[1];

    // 3. Check parent if at least one child is checked
    if(len) {
        $(parent_id).attr('checked', true);
    } else {
        // 2. Uncheck parent if all childs are unchecked.
        $(parent_id).attr('checked', false);
    }
});