表格中的checkbox复选框 全选非全选 公共方法 及提交选中结果
1 <!DOCTYPE html> 2 <html> 3 4 <head> 5 <meta charset="utf-8" /> 6 <title></title> 7 </head> 8 <script type="text/javascript" src="js/jquery-1.8.0.js"></script> 9 10 <body> 11 12 <div> 13 <input type="button" value="加载表格体" onclick="showTbody()"/> 14 </div> 15 <hr /> 16 <!--///----------------------只要符合下面这个结构就可以用公共方法------------------------> 17 <table> 18 <thead> 19 <tr> 20 <td><input type="checkbox" class="allCheck"</td> 21 <td>全选</td> 22 </tr> 23 </thead> 24 <hr /> 25 26 <tbody id="tbody1"> 27 <!--<tr> 28 <td><input type="checkbox" /></td> 29 <td>子复选框1</td> 30 </tr>--> 31 </tbody> 32 33 </table> 34 <!--///----------------------------------------------------------------------------------> 35 <hr /> 36 37 <div > 38 <input type="button" value="提交" onclick="mySubmit()"/> 39 </div> 40 41 </body> 42 <script> 43 $(function(){ 44 $(".allCheck").live("click",checkAll); //给全选按钮绑定全选事件 45 // $(".allCheck").bind("click",checkAll); 46 /* 47 1.这里因为thead标签是写好的,所以也可以用bind,如果thead标签中的全选按钮也是动态加载的话 48 就必须用live方法,或者像生成td那样在生成的同时就马上bind绑定,否则会无效。 49 50 2.如果是通用的给类选择器加的方法,还是尽量用live好。 51 比如 : 这个可以是所有全选复选框的公共方法,只要给每个全选复选框 加上 class="allCheck"即可 52 这样就不用给每个全选框都绑定一遍这个方法 53 54 3.当然也可以给每一个子复选框都加个 class="childCheckBox",然后写个公共的: 55 $(".childCheckBox").live("click",cancelCheckAll); 56 即打开代码中的 带有 “///子复选框方案2************* ” 的行 57 */ 58 59 // $(".childCheckBox").live("click",cancelCheckAll); ///子复选框方案2************* 60 61 }); 62 63 ///加载表格体方法 64 function showTbody(){ 65 var obj = $("#tbody1"); 66 var list = [{id:1,name:"1号子复选框"},{id:2,name:"2号子复选框"}]; 67 68 69 //开始拼接tbody 70 $.each(list, function(i,v) { 71 var tr = $("<tr>").appendTo(obj); 72 //子复选框 73 $("<td>").append($("<input>",{type:'checkbox',value:v.id}).bind("click",cancelCheckAll)).appendTo(tr); ///子复选框方案1 74 // $("<td>").append($("<input>",{type:'checkbox',value:v.id,class:'childCheckBox'})).appendTo(tr); ///子复选框方案2************* 75 //显示名称 76 $("<td>",{ 77 text:v.name 78 }).appendTo(tr); 79 80 }); 81 82 } 83 84 ///-------------------------公共的全选和非全选方法----------------------------- 85 86 function checkAll(){ ///实现全选和全不选功能 87 var allchecked = this.checked; 88 var checks = $(this).closest("table").children("tbody").find(":checkbox"); 89 $.each(checks,function(index,item){ 90 item.checked = allchecked; 91 }) 92 } 93 94 function cancelCheckAll(){ ///实现取消任意一个子选项选中时,自动去掉全选的选中状态 95 96 var allCheck = $(this).closest("table").children("thead").find(":checkbox").eq(0); 97 if(!this.checked){ 98 allCheck[0].checked=false; 99 } 100 } 101 /* 102 这两个方法可以是多处 有全选功能的复选框 的公共方法,只要目标表格的结构符合 table > thead > tbody 结构,就可以调用上面的两个方法 103 */ 104 ///------------------------------------------------------ 105 106 ///提交方法 107 function mySubmit(){ 108 //获取所有选中的复选框对象 109 var checkeds = $("#tbody1 :checkbox:checked"); ///tbody下的复选框中选中的 110 if(checkeds.length==0){ 111 alert("请选择复选框!"); 112 return; 113 } 114 var checkedId = ""; 115 for(var i=0;i<checkeds.length;i++){ 116 var id = checkeds[i].value; 117 checkedId+=id+","; 118 } 119 checkedId = checkedId.substring(0,checkedId.length-1);//去掉最后的逗号, 120 var data = ""; 121 data += "&checkedIds="+checkedId; 122 alert("data: "+data); 123 /* 下面可以写 ajax 方法请求后台 124 $.ajax({ 125 url:"", 126 data:data, 127 async:true 128 success:function(response){ 129 130 } 131 });*/ 132 } 133 134 135 </script> 136 137 </html>