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 Kling
showReport
Yoeri
Yoeri
、または回答されたような代替手段を探す唯一のオプションですか?