2013-03-22 91 views
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。有人可以帮忙吗?

感谢

+1

什么是盒子的长度? – Anoop 2013-03-22 18:07:36

+0

盒子的长度也是0 – user1882705 2013-03-22 18:09:52

+0

我相信在第一个(JS)行中使用的选择器是不正确的。或者在圆顶准备好之前您正在运行js代码 – Anoop 2013-03-22 18:13:50

回答

2

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

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

你只需要包装外中继器与您可以在DOM找到一个元素:

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

然后寻找一个:

var boxes = $("#checkboxContainer .chkToCompare"); 
0

使用中继器的DIV中与固定ID

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

以及使用您使用<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); 

这应该工作。