访问网格中的不同复选框

时间:2012-11-02 08:11:06

标签: javascript asp.net

我有一个带有两个复选框列的网格。 我希望每列都有单独的计数。我无法单独访问它们。 这是我尝试过的:

function CountChkBxCancel() {
    function CountChkBx() {  
        for (var i = 0; i < document.forms[0].length; i++) {
        if (document.forms[0].elements[i].checked) {
            numChecked = numChecked + 1;
        }
    }
    document.getElementById('<%=lblConfirmationCount.ClientID %>').value = numChecked;
    CountChkBxCancel();
    if (numChecked > 0) {
        document.getElementById('<%=lblConfirmationCount.ClientID %>').innerHTML = numChecked;
    }else {
        document.getElementById('<%=lblConfirmationCount.ClientID %>').innerHTML = '0';
    }
}

此网格

中的两个复选框列的ID
<ItemTemplate>
    <%-- <asp:Label ID="Label6" runat="server"> <%#         Container.DataItemIndex + 1 %></asp:Label> --%>
    <asp:CheckBox ID="chkNominee" runat="server" onclick="CountChkBx()" />
</ItemTemplate>
<ItemTemplate>
    <asp:CheckBox ID="chkCancel" runat="server" onclick="CountChkBxCancel()" />
</ItemTemplate>

如何访问这些不同ID的复选框计数?

2 个答案:

答案 0 :(得分:0)

 <script type="text/javascript">
      function CountChkBx(checkBox) {
           var checked = 0;
           var checkBoxes = document.getElementsByClassName(checkBox.parentNode.className);
           for (var i = 0; i < checkBoxes.length; i++) {
                if (checkBoxes[i].getElementsByTagName("INPUT")[0].checked) {
                     checked++;
                }
           }

           var label = null;
           switch (checkBox.parentNode.className) {
                case "cbNominee":
                     label = document.getElementById("<%= lblConfirmationCount.ClientID %>");
                     break;
                case "cbCancel":
                     label = document.getElementById("<%= lblCancelCount.ClientID %>");
                     break;
           }

           if (label) {
                label.innerHTML = checked.toString();
           }
      }
 </script>

 <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="false" >
      <Columns>
           <asp:TemplateField>
                <ItemTemplate>
                     <asp:CheckBox ID="chkNominee" runat="server" CssClass="cbNominee" onclick="CountChkBx(this)" />
                </ItemTemplate>
           </asp:TemplateField>
           <asp:TemplateField>
                <ItemTemplate>
                     <asp:CheckBox ID="chkCancel" runat="server" CssClass="cbCancel" onclick="CountChkBx(this)" />
                </ItemTemplate>
           </asp:TemplateField>
      </Columns>
 </asp:GridView>
 <br />
 Confirmed: <asp:Label runat="server" ID="lblConfirmationCount" />
 <br />
 Canceled: <asp:Label runat="server" ID="lblCancelCount" />

答案 1 :(得分:0)

             function CountChkBx() {
                    var confirmCount = 0;
        var cancelCount = 0;
        Parent = document.getElementById('<%= this.gvNominationList.ClientID %>');
        for (i = 1; i < Parent.rows.length; i++) {
            var tr = Parent.rows[i];
            //                var td = tr.firstChild;
            //                var item = td.firstChild;
            var td1 = tr.childNodes[0];
            var td2 = tr.childNodes[1];
            var item1 = td1.childNodes[0].firstChild;
            var item2 = td2.childNodes[0].firstChild;

            if (item1.type == "checkbox") {
                if (item1.checked)
                    confirmCount = confirmCount + 1;
            }

            if (item2.type == "checkbox") {
                if (item2.checked)
                    cancelCount = cancelCount + 1;
            }

        }
        document.getElementById('<%=lblConfirmationCount.ClientID %>').innerHTML = confirmCount;
        document.getElementById('<%=lblCancelCount.ClientID %>').innerHTML = cancelCount;
    }