2011-03-12 8 views
6

JQuery UIダイアログ機能(表示されているかどうかにかかわらず)を使用してページ上に作成されたすべてのダイアログにイベントをバインドしようとしています。私はそこに連れて行くセレクターを見つけられないようです。私は.ui-dialog.ui-dialog-contentの両方を試してみました。JQueryですべてのダイアログを見つける方法

私はジェネリックメソッドを作成しようとしているので、作成されたダイアログのIDはわかりません。

私は以下のコードを使ってテストしています。ダイアログのID(#mydialog)を指定すると動作しますが、実稼働環境ではわかりません。

$("div.ui-dialog").bind("dialogclose", function(event, ui) { 
    window.alert("close fired"); 
} 

答えて

7

ダイアログには共通のクラスがありますか?それらはすべて、「UI-ダイアログ」クラスを持っている場合、これは動作します:

$(".ui-dialog") 

$("div.ui-dialog") 

のあなたの例は、おそらくべき、UI-ダイアログのクラスを持つすべてのdiv要素を選択するように求めされていますクラスがdiv要素に与えられている限り、動作します。

ダイアログエレメントが存在する前にバインドするのが問題でしょうか?代わりに.live()関数を使用して、関数が呼び出されたときに存在するダイアログだけでなく、任意のポイントで作成されたダイアログにバインドすることもできます。

HTMLスニペットを投稿すると役立ちます。

+0

は、問題解決().liveの呼び出しを変更し、将来の参考のため は、UI-ダイアログクラスが追加されます(と私のアプリでは、他のカップルを!) JQuery UIでは、上記のコードはbind()の代わりにlive()に変更されているので汎用的でどこでも使えるはずです。 –

2

あなたはこれを使用することができます:

$(":ui-dialog").each(function(){ 
    "enter your code here" 
}) 
+0

にする必要があります。代わりに: –

+1

私にはわかりません。 ".ui-dialog"は実行されませんが、 ":ui-dialog"のみ – Charlestown

+0

これは素晴らしい動作です。クラスごとに選択するのが普通ですが、ダイアログだけが使用されるという保証はありません。これはjQueryメタセレクタです(:visibleのように)。これは、すべてのダイアログを取得することが保証されています。 –

関連する問題