在主页中我有一个标准的DataGrid:
<asp:DataGrid ID="dgMyGrid" runat="server" AutoGenerateColumns="false">
<Columns>
<asp:TemplateColumn>
<HeaderTemplate>
<asp:CheckBox CssClass="Checker" ID="cbSelectAll" runat="server" />
</HeaderTemplate>
<ItemTemplate>
<asp:CheckBox ID="cbSelect" runat="server" />
</ItemTemplate>
</asp:TemplateColumn>
</Columns>
</asp:DataGrid>
让以下jQuery使标题复选框全选:
$(document).ready(function() {
$("#ctl00_ContentPlaceHolder1_dgMyGrid_ctl01_cbSelectAll").click(function() {
$("#<%=dgID %> :checkbox").each(function(i)
{
this.checked = $("#ctl00_ContentPlaceHolder1_dgMyGrid_ctl01_cbSelectAll").is(":checked")
});
});
});
这有效,但它有点难看 - 我无法获得标题复选框的客户端ID &LT;%= cbSelectAll.ClientID%GT; (正如我为datagrid所做的那样)可能是因为javascript是在该控件之前呈现的。有没有更优雅的方式让我从数据网格中获取我的复选框的clientID?我认为如果我没有像这样对clientID进行硬编码会更好。
道歉,如果对此的答案是显而易见的,那是我尝试jQuery的第一天! :)
答案 0 :(得分:1)
为什么不引用复选框'cbSelectAll'的类。
<asp:CheckBox CssClass="Checker" ID="cbSelectAll" runat="server" />
$("#<%=dgID %> :checkbox").each(function(i)
{
this.checked = $(".Checker").is(":checked");
});
如果“Checker”类用于多个控件,您始终可以指定一个唯一的类。
<asp:CheckBox CssClass="Checker cbSelectAll" ID="cbSelectAll" runat="server" />
$("#<%=dgID %> :checkbox").each(function(i)
{
this.checked = $(".cbSelectAll").is(":checked");
});
答案 1 :(得分:1)
此代码可找到您的复选框
protected static Control FindControl(Control control, string controlId)
{
Control result;
foreach (Control ctrl in control.Controls)
{
if (ctrl.ID == controlId)
{
result = ctrl;
return result;
}
if (ctrl.Controls.Count != 0)
{
result = FindControl(ctrl, controlId);
if (result != null)
{
return result;
}
}
}
return null;
}
现在你可以在aspx页面上使用了:
<%= FindControl(dgMyGrid, "cbSelectAll").ClientID%>