2009-04-17 15 views

答えて

10

(見hereを持っている)部分ポストバックが終了した後に実行されるスクリプトを登録するためのScriptManagerクラスを使用することができますあなたが接続しようとしているイベントは、jQuery live eventsを使うことができます。

もう1つの方法は、イベント委任を手動で行うことです。それは "ライブ"イベントがカバーの下でやっているものです。イベントハンドラをドキュメント自体にアタッチし、イベントの送信者が期待する要素であれば条件付きでメソッドを実行します。

$(document).click(function(e){ 
    if($(e.target).is(".collapseButton")){ 
     $(this).find(".collapsePanel").slideToggle(500); 
    } 
}) 
+0

働いてくれてありがとう、それはエフェクティブではないが、この1ページのためだけだと思う​​。 – Blankman

+0

実際には非常に効率的です。グリッドのすべての行にイベントハンドラーがある場合、グリッド全体に対して1つのイベントハンドラーしかありません。各行に複数のイベントハンドラがある場合は、さらに優れています。手動で作成された、または部分的なポストバックを介して作成された新しいレコードに添付するものは1つだけです。 – Mark

6

私はあなたがAsp.netの土地で働いている '部分ページのポストバック'から推測しています。

は、あなたはまだそのFUNC内のすべての通常のjQueryのものを使用することができるはず

Sys.Application.add_load(function() { }); 

を使用してみてください。

+0

正確に。これは、MSがそのロードイベントを発明した理由です。彼らは部分的なポストバック後にDOM要素を吹き飛ばしてしまうことを知っていました。そして、派手なAJAX UpdatePanelsが使用されているかどうかにかかわらず、ない。 – JPot

+0

パーフェクト。これはトリックでした。ちょうど私の同じセットアップ方法を直接このイベントを通して呼びましたが、今は完全に動作します。乾杯! –

0

一部のDOM要素は、部分的なポストバックを行うときに置き換えられます。もちろん、新しい要素はjQueryバインディングを失います。

Sys.WebForms.PageRequestManager.getInstance().add_endRequest(function(){}); 

それともそれが制御されている場合:あなたは、あなたがPageRequestManager endRequestEventにタップすることができますいずれか

2

jQuery 1.3 hereの「ライブ」機能を確認してください。将来の要素だけでなく、ページ上の現在の要素にもイベントを追加できます。これにより、コードを簡単に書くことができます。

使用 "の" イベント:

+0

私たちは1.3を使用していないので、cnt 'liveを使用します。 – Blankman

+1

私たちは "ライブ"イベントをたくさん使いますが、時にはニーズを満たしていないこともあります。 DOMを操作するためにjQueryを使用している場合は、部分的なポストバックを介して更新された後にDOMを再操作する必要があります。 – Mark

+1

イベントの委任を手動で行うことで、liveと同じ効果を得ることができます。 – Mark

0

(jQueryの2.xのを使用して)最もエレガントな解決策はこれです。要素自体ではなく、ドキュメントにイベントをバインドすることを確認してください。

コード例:

$(document).on('click', 'div.messages', function() { 
    console.log('click on div.messages'); 
    return false; 
}); 

は、例えばdocument.readyにこのコードを入れてください。

div.messagesがUpdatePanel内で変更または作成された場合でも、これは機能します。そして、一度に2回以上発射されることはありません。

関連する問題