2012-05-24 55 views
2

我使用此代碼來檢查樹狀視圖中的複選框。CheckAll CheckBox Jquery

HTML:

<div id="tree"> 
    <ul> 
     <li> 
      <input type="checkbox"/> Root 
      <ul> 
       <li> 
        <input type="checkbox"/> Child 1 
        <ul> 
         <li><input type="checkbox"/> Subchild 1</li> 
         <li><input type="checkbox"/> Subchild 2</li> 
         <li><input type="checkbox"/> Subchild 3</li> 
        </ul> 
       </li> 
       <li> 
        <input type="checkbox"/> Child 2 
        <ul> 
         <li><input type="checkbox"/> Subchild 1</li> 
         <li><input type="checkbox"/> Subchild 2</li> 
        </ul> 
       </li> 
      </ul> 
     </li> 
    </ul> 
</div>​ 

的JavaScript:

$(document).ready(function() { 
    $("#tree input:checkbox").change(function() { 
     var val = $(this).attr("checked"); 
     $(this).parent().find("input:checkbox").each(function() { 
      if (val) { 
       $(this).attr("checked", "checked"); 
      } else { 
       $(this).removeAttr("checked"); 
      } 
     }); 
    }); 
});​ 

的jsfiddle:http://jsfiddle.net/jRAcq/

這個效果很好。但是,如果任何一個子節點未被選中,那麼根/子根將被取消選中。我怎樣才能做到這一點?

+0

真的應該取消選中根嗎?我不這麼認爲。這意味着沒有一個孩子沒有被選中。 如果所有的孩子都沒有選中,那麼根目錄也應該取消選中。但之前沒有。 這是我的2美分。 –

+1

爲了澄清,如果我點擊根,然後點擊Sub子1,Child 1和Root是否被取消選中? – mattytommo

回答

1

嘗試......

$(document).ready(function() { 
$("#tree input:checkbox").change(function() { 
    var val = $(this).attr("checked"); 
    $(this).parent().find("input:checkbox").each(function() { 
     if (val) { 
      $(this).attr("checked", "checked"); 
     } else { 
      $(this).removeAttr("checked"); 
      $(this).parents('ul').each(function(){ 
       $(this).prev('input:checkbox').removeAttr("checked"); 
      }); 
     } 
    }); 
}); 

});

+1

'.parent()。parent()。prev()'?神聖的DOM-穿越蝙蝠俠! :) – mattytommo

+0

@Priyank,運作良好,但如果我取消選中任何兒童複選框,然後最上面的複選框仍然檢查:( – Techonthenet

+0

@Techonthenet代碼更新檢查現在..... –

1
$(document).ready(function() { 
       $.extend($.expr[':'], { 
        unchecked: function (obj) { 
         return ((obj.type == 'checkbox' || obj.type == 'radio') && !$(obj).is(':checked')); 
        } 
       }); 

       $("#tree input:checkbox").live('change', function() { 
        $(this).next('ul').find('input:checkbox').prop('checked', $(this).prop("checked")); 

        for (var i = $('#tree').find('ul').length - 1; i >= 0; i--) { 
         $('#tree').find('ul:eq(' + i + ')').prev('input:checkbox').prop('checked', function() { 
          return $(this).next('ul').find('input:unchecked').length === 0 ? true : false; 
         }); 
        } 
       }); 
      }); 

現場演示中看到此鏈接:http://jsfiddle.net/nanoquantumtech/JfMCP/

//或

 $(document).ready(function() { 
      $.extend($.expr[':'], { 
       unchecked: function (obj) { 
        return ((obj.type == 'checkbox' || obj.type == 'radio') && !$(obj).is(':checked')); 
       } 
      }); 

      jQuery.fn.reverse = [].reverse; 

      $("#tree input:checkbox").live('change', function() { 
       $(this).next('ul').find('input:checkbox').prop('checked', $(this).prop("checked")); 

       $('#tree').find("input:checkbox + ul").reverse().each(function() { 
        $(this).prev('input:checkbox').prop('checked', $(this).find('input:unchecked').length === 0 ? true : false); 
       }); 
      }); 
     }); 

// =================== ================================================== ============= //

accroding到您的HTML jQuery代碼低於:

$(document).ready(function() { 
      $.extend($.expr[':'], { 
       unchecked: function (obj) { 
        return ((obj.type == 'checkbox' || obj.type == 'radio') && !$(obj).is(':checked')); 
       } 
      }); 

      jQuery.fn.reverse = [].reverse; 

      $('#PagesTree').find('input:checkbox').live('change', function() { 
       $('#' + $(this).attr('name').replace(/CheckBox/g, '') + 'Nodes').find('input:checkbox').prop('checked', $(this).prop("checked")); 

       $('#PagesTree').find('input:checkbox').reverse().each(function() { 
        var obj = $('#' + $(this).attr('name').replace(/CheckBox/g, '') + 'Nodes'); 
        if (obj.find('input:checkbox').length > 0) 
         $(this).prop('checked', obj.find('input:unchecked').length === 0 ? true : false); 
       }); 
      }); 
     }); 

現場演示請參閱此鏈接:http://jsfiddle.net/nanoquantumtech/GmT7U/

+0

演示效果很好,但這不是在asp.net treeview中工作。 ( – Techonthenet

+0

可以顯示你的asp.net代碼和你使用的是什麼版本的jquery? – Thulasiram

+0

請在http://www.sourcepod.com/tzjfsx87-7542找到jquery和html – Techonthenet