UpdatePanelは、更新時に更新パネルの内容を完全に置き換えます。つまり、更新パネルに新しい要素があるため、サブスクライブしたイベントはサブスクライブされなくなりました。
これを回避するために私が行ったのは、更新のたびに必要なイベントを再度サブスクライブすることです。私$(document).ready()
は最初のロードに使用し、次にMicrosoft PageRequestManager
(ページに更新パネルがある場合に使用可能)を使用してすべての更新を再サブスクライブします。
$(document).ready(function() {
// bind your jQuery events here initially
});
var prm = Sys.WebForms.PageRequestManager.getInstance();
prm.add_endRequest(function() {
// re-bind your jQuery events here
});
PageRequestManager
更新パネルがページ上にある場合、自動的に利用可能であるjavascriptオブジェクトです。UpdatePanelがページ上にある限り、コードを使用するために上記のコード以外を実行する必要はありません。
より詳細な制御が必要な場合、このイベントは.NETイベントが引数を渡す方法と同様の引数を渡します。(sender, eventArgs)
これにより、イベントを発生させた原因を確認し、必要な場合にのみ再バインドできます。
Microsoftのドキュメントの最新バージョンは次のとおりです。msdn.microsoft.com/.../ bb383810.aspx
必要に応じて、jQueryを使用することをお勧めします.on()
。これらの方法は、更新のたびにDOM要素に再サブスクライブするよりも効率的です。ただし、このアプローチを使用する前に、すべてのドキュメントを読んでください。これは、ニーズを満たしていない場合があるためです。.delegate()
またはを使用するようにリファクタリングするのが無理なjQueryプラグインはたくさんある.on()
ので、そのような場合は、再サブスクライブするほうがよいでしょう。