jQuery UIダイアログボックスが開いているかどうかを検出する


97

jQuery UIダイアログを使用しています。それが開いているなら、私は一つのことをしたいです。閉まっているなら、またやりたいです。

私の質問は、jQuery UIダイアログボックスが開いているかどうかをどのように検出するのですか?

回答:


173

あなたがドキュメントを読んだ場合

$('#mydialog').dialog('isOpen')

このメソッドは、jQueryオブジェクトではなくブール値(trueまたはfalse)を返します。


1
どー!どうやって見落としたのかわかりません。ありがとうございました。
user208662 2010

1
どのようにしてすべてのダイアログに対してこのテストを実行しますか?initとオプションが別々の10個の異なるダイアログがあり、特定のセレクターではなく、それらのいずれかが開いているかどうかをテストしたいとしますか?
Kirk Ross

上記のダイアログにクラスを追加し、isOpenチェックのセレクターを変更します。
Suipaste 2015

1
加えて:10のダイアログ?1つまたは2つのインスタンスを再利用することでこれを減らすことは、検討に値する考えです
David

1
また、ダイアログがで初期化されているかどうかも確認してください$("#mydialog").hasClass("ui-dialog-content")stackoverflow.com/questions/29528706/…を
Autumn Leonard

53

実際には、明示的にtrueと比較する必要があります。ダイアログがまだ存在しない場合、(期待どおりに)falseを返さず、DOMオブジェクトを返します。

if ($('#mydialog').dialog('isOpen') === true) {
    // true
} else {
    // false
}

4
最新のJQueryではfalseを返します。
hoyhoy

1
どのようにしてすべてのダイアログに対してこのテストを実行しますか?initとオプションが別々の10個の異なるダイアログがあり、特定のセレクターではなく、それらのいずれかが開いているかどうかをテストしたいとしますか?
Kirk Ross

2
たぶん$( "。ui-dialog")。each(function(/ * check this dialog * /))のような関数を作成しますか?
marcovtwout 2014年

21

特定の要素でダイアログが開いているかどうかを確認したい場合は、次のようにします。

if ($('#elem').closest('.ui-dialog').is(':visible')) { 
  // do something
}

または、要素自体が表示されているかどうかを確認するだけの場合は、次のようにすることができます。

if ($('#elem').is(':visible')) { 
  // do something
}

または...

if ($('#elem:visible').length) { 
  // do something
}

3
:それはそのように初期化されていない場合、私は私のdivをチェック$dialog.hasClass('ui-dialog-content')
セルゲイ

おかげで、「isOpen」を使用して上記の答えを得ることができませんでしたが、これでうまくいきました。
カイルチャリス


1

Nick Craverのコメントは、ダイアログがまだ定義されていない場合に発生するエラーを回避する最も簡単なものです。

if ($('#elem').is(':visible')) { 
  // do something
}

ただし、最初にCSSで可視性を設定する必要があります。

#elem { display: none; }
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.