1 CheckBox checkAll = (CheckBox)myGridView.HeaderRow.Cells[0].FindControl("checkAll"); 2 List<CheckBox> lists = new List<CheckBox>(); 3 for (int i = 0; i < myGridView.Rows.Count; i++) 4 { 5 CheckBox ck = (CheckBox)myGridView.Rows[i].Cells[0].FindControl("chkAcceptReject"); 6 lists.Add(ck); 7 } 9 checkAll.Attributes.Add("onclick", "toggle(this," + lists + ")"); 10 11 Page.ClientScript.RegisterStartupScript(this.GetType(), "toggle", 12 " function toggle(source,lists) {for (var i = 0, n = lists.Count; i < n; i++) {lists[i].checked = source.checked;} }", true);
想写一个checkbox全选的功能,无奈javascript学的不好,还请大婶赐教 为什么点了没反应啊啊啊
checkAll.Attributes.Add("onclick", "toggle(this," + lists + ")");
是这句话的问题,因为它相当于
checkAll.Attributes.Add("onclick", "toggle(this," + lists.ToString() + ")");
不要以为lists会以CheckBox集合的形式传入toggle方法
要么你就全后台解决 思路:
CheckBox checkAll = (CheckBox)myGridView.HeaderRow.Cells[0].FindControl("checkAll"); List<CheckBox> lists = new List<CheckBox>(); for (int i = 0; i < myGridView.Rows.Count; i++) { CheckBox ck = (CheckBox)myGridView.Rows[i].Cells[0].FindControl("chkAcceptReject"); lists.Add(ck); } checkAll.Click += ........FunctionXX(xxx,xxx);//CheckBox的后台点击事件 public void FunctionXX(xxx,xxx) { foreach(CheckBox ck in lists) { ck.checked = checkAll.checked; } }
也可以全前台解决
后台部分
CheckBox checkAll = (CheckBox)myGridView.HeaderRow.Cells[0].FindControl("checkAll"); checkAll.Attributes.Add("onclick", "toggle(this)");
前台部分
function toggle(dom) { var grid = $("#xxxx");//xxxx是DataGrid的ID var rows = grid.find("tr"); var checked = $(dom).attr("checked"); for(var i=0;i<rows.length;i++) { $("td :eq(0)",rows.eq(i)).find(":checkbox").attr("checked",checked); } }
大概就是这么个意思
因为前台根本没有list这个变量
做个全选也要靠后台,简直是浪费资源,浪费性能。。。。。。
JQ:
if($(dom).attr("checked")){
$(dom).attr("checked",false)
}else{
$(dom).attr("checked",true);
}
上面几个回答都是。。。js有 List<CheckBox> lists = new List<CheckBox>();?亮了我的眼睛