2011-12-03 3 views
-2

Смотрите следующую разметку,Выберите в JQuery

<div style="width: 30%;"> 
    <asp:Repeater ID="rptParent" runat="server" OnItemDataBound="rptParent_ItemDataBound"> 
     <ItemTemplate> 
      <table id="tblRoleHdr" style="border-style: solid; border-width: 1px; 
       border-color: Red;"> 
       <tr> 
        <td style="width: 1%;"> 
         <asp:CheckBox ID="chkRoleHdr" runat="server" /> 
        </td> 
        <td style="width: 50%;"> 
         <asp:HiddenField ID="hidRoleID" runat="server" Value='<%#Eval("RoleID") %>' /> 
         <asp:Label ID="lblRole" runat="server" Text='<%#Eval("Role") %>'></asp:Label> 
        </td> 
        <td style="width: 1%;"> 
         <asp:CheckBox ID="chkP1Hdr" runat="server" CssClass="chkP1Hdr" /> 
        </td> 
        <td style="width: 1%;"> 
         <asp:CheckBox ID="chkP2Hdr" runat="server" CssClass="chkP2Hdr" /> 
        </td> 
        <td style="width: 1%;"> 
         <asp:CheckBox ID="chkP3Hdr" runat="server" CssClass="chkP3Hdr" /> 
        </td> 
       </tr> 
      </table> 
      <asp:Repeater ID="rptChild" runat="server"> 
       <HeaderTemplate> 
        <table id="tblChild" class="tblChild" style="border-style: solid; border-width: 1px; 
       border-color:Green;"> 
       </HeaderTemplate> 
       <ItemTemplate> 
        <tr> 
         <td style="width: 1%;"> 
          &nbsp;&nbsp;&nbsp;&nbsp; 
         </td> 
         <td style="width: 50%;"> 
          <asp:HiddenField ID="hidUserID" runat="server" Value='<%#Eval("UserID") %>' /> 
          <asp:Label ID="lblUser" runat="server" Text='<%#Eval("User") %>'></asp:Label> 
         </td> 
         <td style="width: 1%;"> 
          <asp:CheckBox ID="chkP1Child" runat="server" CssClass="chkP1Child" /> 
         </td> 
         <td style="width: 1%;"> 
          <asp:CheckBox ID="chkP2Child" runat="server" CssClass="chkP2Child"/> 
         </td> 
         <td style="width: 1%;"> 
          <asp:CheckBox ID="chkP3Child" runat="server" CssClass="chkP3Child" /> 
         </td> 
        </tr> 
       </ItemTemplate> 
       <FooterTemplate> 
        </table> 
       </FooterTemplate> 
      </asp:Repeater> 
     </ItemTemplate> 
     <SeparatorTemplate> 
      <hr /> 
     </SeparatorTemplate> 
    </asp:Repeater> 
</div> 

Это сгенерирует следующий вывод

enter image description here

Что мне нужно сделать в JQuery является

  1. Если я поставлю флажок, отмеченный красным цветом, все флажки, принадлежащие группе, будут выбраны.

  2. Если я проверить СИНИЙ HEADER Check Box, то все флажок в столбце будет выбран

  3. Шаг 2 для остальных двух флажков.

Не могли бы вы посмотреть классы, которые я указал для флажков. Как выполнить задачу с помощью jQuery?

+0

Почему я получил два пустых голоса ... – Rauf

ответ

0

Это должно вас начать. Это будет прослушивать любые чекбокс, которые будут проверяться. Если флажок имеет класс chkP1Hdr, и он проверен, он проверяет все дети chkP1Child.

$("input[type='checkbox']").change(function() { 
    if ($(this).hasClass("chkP1Hdr") && this.checked) 
     $(".chkP1Child").attr("checked", true); 
    if ($(this).hasClass("chkP2Hdr") && this.checked) 
     $(".chkP2Child").attr("checked", true); 
    if ($(this).hasClass("chkP3Hdr") && this.checked) 
     $(".chkP3Child").attr("checked", true); 
}); 

И так далее для 2 и 3

+0

Не используйте '$ (this) .attr (" checked ")', чтобы получить текущее состояние свойства 'checked'. Вместо этого используйте 'this.checked', поскольку он позволяет избежать дополнительных накладных расходов. Кроме того, 'attr()' на самом деле не дает вам атрибут, а скорее значение свойства, поэтому, если вы будете использовать jQuery, '.prop()' будет более уместным. Они пытались исправить свой метод '.attr()' в '1.6', чтобы он соответствовал только атрибутам, но было слишком поздно, и таким образом был такой массивный сбой сломанного кода, что они немедленно откатили большую часть изменение в '1.6.1'. – RightSaidFred

+0

@RightSaidFred - Я переключил его, спасибо. Я могу понять, почему this.checked позволит избежать накладных расходов, но можете ли вы объяснить, что вы подразумеваете под 'не на самом деле дает вам атрибут, а скорее значение свойства'? Разве это не стоимость имущества, что я хочу? Не хочу ли я проверить правдивое значение проверенного значения свойства? –

+0

@RightSaidFred - извините, подумав об этом еще ... в чем разница между проверенным значением свойства и проверенным атрибутом? Разве последнее не контролирует первое? –

1

Если вы можете изменить разметку немного, вы можете использовать некоторые дополнительные классы и данных- атрибуты, чтобы получить эффект, который вы хотите. Во-первых, каждый флажок, который должен быть автоматически выбран группой/столбцом, будет иметь класс группового уровня и/или столбца. Например:

<input type="checkbox" class="groupA column3" /> 

Далее, заголовок флажков все должны совместно использовать общий класс, который может быть целенаправленным с JQuery и данных- атрибутами, чтобы связать их вместе с флажками, они должны контролировать.

<input type="checkbox" class="groupHeading" data-group="GroupA" /> 
<input type="checkbox" class="columnHeading" data-group="GroupA" data-column="Column3" /> 

С помощью этой информации jQuery может сделать все остальное.

// Handle group heading change 
$('.groupHeading').change(function() { 
    // Set checked state to all checkboxes with class matching data-group 
    $('.'+$(this).data('group')).attr('checked', $(this).is(':checked')); 
}); 

// Handle column heading change 
$('.columnHeading').change(function() { 
    // Set checked state to all checkboxes with class matching data-group and data-column 
    $('.'+$(this).data('group')+'.'+$(this).data('column')).attr('checked', $(this).is(':checked')); 
}); 

Рабочий стол приведен в http://jsfiddle.net/eKxJm/1/.

+0

Все элементы динамически создаются. Я не могу с жестким кодом «GroupA» что-то вроде ...? – Rauf

+0

И когда я скопировал разметку на VS2010. Это не работает :( – Rauf

Смежные вопросы