0

aspxページには、チェックボックスのテンプレートコントロールを持つグリッドビューがあります。

<asp:gridview .....
  <columns>
    <asp:TemplateField>
      <HeaderTemplate>
        <asp:CheckBox ID="chkAll" runat="server"/>
      </HeaderTemplate>
      <ItemTemplate>
        <asp:CheckBox ID="chkSelect" runat="server"/>
      </ItemTemplate>
    </asp:TemplateField>
...

今、私が次のようなものを書くと

$(#'<%=chkSelect.ClientID%>').something( function() {});

「chkSelect は現在のコンテキストに存在しません」というエラーが表示されます。これは非常に明白です。この要素は griddata が読み込まれるときに存在するためです。チェックボックスの変更イベントをデリゲートにバインドしました。

$("body").delegate(":checkbox", "change", function () {
                custList = $(':checkbox:checked').map(function () { return $(this).closest('tr').find('.grdCustName').text() }).get();
                $('#<%=hdnFromCustomer.ClientID %>').val(custList);
            }

これは正常に機能しています。問題は、特定の ID (ここでは例chkAll) のチェックボックスが変更 (クリック) されているかどうかを知る必要があることです。みたいな$(':checkbox').attr(checked, 'on')もので。

しかし、問題は、私が書いた場合 $('#<%=chkAll.ClientID %>')、このチェックボックスは開始時にDOMに存在しないため、許可されないことですが、ユーザーがshowReportボタンをクリックしてグリッドにデータが入力されると利用可能になります。

したがって、基本的に、私の質問は、存在しないが将来的に存在するDOMでこのチェックボックス(またはその他の要素)を選択するためにどのように選択できるか、またはどのセレクターを使用する必要があるかです。

編集:いくつかの回答に応えて、問題は拘束力がありませdelegate()ん。問題は、コメントの通り、彼が頭に釘を打ったことです (彼のコメントと彼への私の返信を読んでください)。問題は、ページの起動時に要素が DOM に存在しないことです。ユーザーがボタンをクリックすると動的に構築され、gridview にデータが入力されます。ここで、この要素が作成されます。動作する可能性がある/動作しない可能性があると説明されているアプローチですが、この場合に説明されているような要素を選択できる方法が (もちろん jQuery によって!) あることを知りたいです。.on().live()Felix KlingshowReportYoeriYoeri、または回答されたような代替手段を探す唯一のオプションですか?

4

3 に答える 3

1

カスタム属性またはクラスで chkAll ボックスを選択しないのはなぜですか?

私はしばしばアクション属性を使用してイベントをバインドします...すべてのものを一貫性を保ち、cssクラスから分離するためです(これは動作をそれにバインドするためではなく、スタイルのためです;-)

<input type="check" action="checkAll"
...
$('input[action=checkAll]').delegate(....) 

アクション属性の追加については、こちらを参照してください ... (余分なスパン要素の追加を避けるため )

于 2012-08-31T09:39:17.483 に答える
1

WebForms で作業するときは、セレクターの末尾をよく使用します。あなたの場合、探しているセレクターは次のようになります。

$("input[id$='checkAll']")

または、WebForms 4.0 を使用している場合は、チェックボックスのクライアント ID モードを静的に設定すると、比較的健全な ID を取得してセレクターとしてハードコードすることができます。

于 2012-08-31T20:56:58.260 に答える
0

ビルドを実行し、.net コード ビハインドから jquery コードを実行するだけです。

この Gist のコードは、迅速かつ簡単にするのに役立ちます: https://gist.github.com/3415335

于 2012-08-31T09:39:30.340 に答える