我需要找到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.有人可以帮忙吗?
由于
答案 0 :(得分:2)
ASP.NET转发器不会发出任何包装标记。除非您明确添加一个,否则您呈现的HTML中没有元素具有与<%= myRepeater.ClientID %>
的输出匹配的ID。
您的计数方法正常,如this Fiddle中所示。
您只需要在外部转发器中包含您可以在DOM中找到的元素:
<div id="checkboxContainer">
<asp:Repeater ...>
...
</asp:Repeater>
</div>
然后寻找:
var boxes = $("#checkboxContainer .chkToCompare");
答案 1 :(得分:0)
在具有固定ID的div中使用您的转发器
<div id="repeaterContainer"></div>
使用Repeater时,您可以使用<thead></thead>
和<tbody></tbody>
html标记来包含标题和正文,并使用复选框计算<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);
这应该有用。