web-dev-qa-db-ja.com

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

JQuery UIダイアログを使用しています。開いている場合は、1つだけやりたいことがあります。閉じている場合は、別の操作を行います。

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

95
user208662

docs。 を読んだ場合

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

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

169
Byron Whitlock

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

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

特定の要素でダイアログが開いているかどうかを確認したい場合、これを行うことができます:

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

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

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

または...

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

jQueryダイアログにはisOpenプロパティがあり、jQueryダイアログが開いているかどうかを確認するために使用できます。

このリンクで例を見ることができます: http://www.codegateway.com/2012/02/detect-if-jquery-dialog-box-is-open.html

2
Avinash

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

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

ただし、次の単純な方法を使用して、CSSで最初に可視性を設定する必要があります。

#elem { display: none; }
0
user2452922