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 %>

この 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>

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);

これはうまくいくはずです。

于 2013-03-22T18:17:07.910 に答える