0

我需要找到在 Jquery 的嵌套中继器内的选定复选框的计数。我的代码如下:

<asp:Repeater runat="server" ID="myRepeater" OnItemDataBound="myRepeaterBinding">
  <asp:Repeater runat="server" ID="internalRepeater" OnItemDataBound="internalRepeaterBinding">
    <input class="chkToCompare" type="checkbox" runat="server" id="xxxx" />
  </asp:Repeater>
</asp:Repeater>

在我的按钮单击中,我正在编写如下函数:

var boxes = $('#' + '<%= myRepeater.ClientID %>').find($('.chkToCompare'));
var checkedLength = (boxes.filter(':checked').length);
alert(checkedLength);

但是checkedLength总是0。有人可以帮忙吗?

谢谢

4

2 回答 2

2

ASP.NET 转发器不发出任何包装标记。除非您显式添加一个,否则呈现的 HTML 中没有任何元素的 ID 与<%= myRepeater.ClientID %>.

this Fiddle所示,您的计数方法工作正常。

您只需要使用可以在 DOM 中找到的元素来包装外部中继器:

<div id="checkboxContainer">
    <asp:Repeater ...>
        ...
    </asp:Repeater>
</div>

然后寻找:

var boxes = $("#checkboxContainer .chkToCompare");
于 2013-03-22T18:18:51.840 回答
0

在具有固定 ID 的 div 中使用中继器

<div id="repeaterContainer"></div>

在使用中继器时,您使用HTML 标签来包含标题<thead></thead><tbody></tbody>正文,并使用您的复选框来计算<tbody></tbody>标签内的中继器项目。然后在您的按钮单击事件上

var count=0;$("#repeaterContainer table>tbody>tr").each(function (i, elem) {
                var tr = $(this); if(tr.find("input[class=chkToCompare]").is(":checked")){count++;}}); alert(count);

这应该有效。

于 2013-03-22T18:17:07.910 回答