Флажок в заголовке Datagrid ClientID (JQuery)

На главной странице у меня есть стандартная 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")
 });
 });
});

это работает, но это немного уродливо - я не могу получить идентификатор клиента для флажка заголовка с
<% = cbSelectAll.ClientID%> (как я сделал для сетки данных) Возможно, потому что javascript отображается перед этим элементом управления. Есть ли для меня более элегантный способ получить clientID моего флажка из сетки данных? Я думаю, что было бы лучше, если бы я не жестко закодировал clientID как этот.

Извиняюсь, если ответ на этот вопрос очевиден, это мой первый день, когда я пробую jQuery!:)

2 ответа

Решение

Этот код, чтобы найти свой флажок

 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%>

Почему бы просто не ссылаться на класс флажка "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");
});
Другие вопросы по тегам