Bir jQuery UI iletişim kutusunun açık olup olmadığını algılama


97

Bir jQuery UI iletişim kutusu kullanıyorum. Açıksa, bir şey yapmak istiyorum. Kapalıysa bir tane daha yapmak istiyorum.

Sorum şu, bir jQuery UI iletişim kutusunun açık olup olmadığını nasıl anlarım?

Yanıtlar:


173

Dokümanları okursanız .

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

Bu yöntem, bir jQuery nesnesi değil, bir Boolean (doğru veya yanlış) döndürür.


1
Doh! Bunu nasıl gözden kaçırdım bilmiyorum. Teşekkür ederim.
user208662

1
Tüm diyaloglar için bu testi nasıl yaparsınız? Diyelim ki ayrı girişlere ve seçeneklere sahip on farklı diyalogunuz var ve bunlardan HERHANGİ BİRİNİN açık olup olmadığını test etmek istiyorsunuz, belirli bir seçici değil mi?
Kirk Ross

Söz konusu iletişim kutularına bir sınıf ekleyin, ardından isOpen kontrolünüzdeki seçiciyi değiştirin.
Suipaste

1
artı ayrıca: on diyalog? belki bir veya iki örneği yeniden kullanarak bunu azaltmak, dikkate
David

1
Ayrıca diyalogun ile başlatılıp başlatılmadığını da kontrol edin $("#mydialog").hasClass("ui-dialog-content"). Stackoverflow.com/questions/29528706/… sayfasına
Sonbahar Leonard

53

Aslında, bunu açıkça doğru ile karşılaştırmanız gerekir. İletişim kutusu henüz mevcut değilse, yanlış döndürmez (beklediğiniz gibi), bir DOM nesnesi döndürür.

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

4
En son JQuery'de yanlış döndürür.
hoyhoy

1
Tüm diyaloglar için bu testi nasıl yaparsınız? Diyelim ki ayrı girişlere ve seçeneklere sahip on farklı diyalogunuz var ve bunlardan HERHANGİ BİRİNİN açık olup olmadığını test etmek istiyorsunuz, belirli bir seçici değil mi?
Kirk Ross

2
Belki $ [". Ui-dialog") gibi bir işlev yaratabilirsiniz. Her biri (işlev (/ * bu iletişim kutusunu kontrol edin * /))?
marcovtwout

21

İletişim kutusunun belirli bir öğede açılıp açılmadığını kontrol etmek istiyorsanız, bunu yapabilirsiniz:

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

Veya sadece öğenin kendisinin görünür olup olmadığını kontrol etmek istiyorsanız, şunları yapabilirsiniz:

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

Veya...

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

3
$dialog.hasClass('ui-dialog-content')
Sergey

Teşekkürler, benim için çalışmak için "isOpen" kullanarak yukarıdaki yanıtları alamadım, ancak bu işe yaradı.
Kyle Challis


1

Nick Craver'ın yorumu, diyalog henüz tanımlanmamışsa ortaya çıkan hatayı önlemek için en basit olanıdır:

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

Öncelikle CSS'nizde görünürlüğü basitçe kullanarak ayarlamalısınız:

#elem { display: none; }
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.