Deteksi apakah kotak dialog jQuery UI terbuka

97

Saya menggunakan dialog jQuery UI. Jika terbuka, saya ingin melakukan satu hal. Jika ditutup, saya ingin melakukan yang lain.

Pertanyaan saya adalah, bagaimana cara mendeteksi jika kotak dialog jQuery UI terbuka atau tidak?

pengguna208662
sumber

Jawaban:

173

Jika Anda membaca dokumen.

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

Metode ini mengembalikan Boolean (benar atau salah), bukan objek jQuery.

Byron Whitlock
sumber
1
Doh! Saya tidak tahu bagaimana saya mengabaikannya. Terima kasih.
pengguna208662
1
Bagaimana Anda akan melakukan tes ini untuk setiap dan semua dialog? Katakanlah Anda memiliki sepuluh dialog berbeda dengan init dan opsi terpisah dan Anda ingin menguji apakah SALAH SATU dialog tersebut terbuka, bukan selektor tertentu?
Kirk Ross
Tambahkan kelas ke dialog tersebut, lalu ubah pemilih pada pemeriksaan isOpen Anda.
Suipaste
1
ditambah juga: sepuluh dialog? mungkin menguranginya dengan menggunakan kembali satu atau dua contoh adalah pemikiran yang layak dipertimbangkan
David
1
Juga periksa apakah dialog telah diinisialisasi dengan $("#mydialog").hasClass("ui-dialog-content"). Lihat stackoverflow.com/questions/29528706/…
Autumn Leonard
53

Sebenarnya, Anda harus membandingkannya secara eksplisit dengan true. Jika dialog belum ada, dialog tidak akan mengembalikan false (seperti yang Anda harapkan), ini akan mengembalikan objek DOM.

if ($('#mydialog').dialog('isOpen') === true) {
    // true
} else {
    // false
}
marcovtwout
sumber
4
Mengembalikan nilai salah di JQuery terbaru.
hoyhoy
1
Bagaimana Anda akan melakukan tes ini untuk setiap dan semua dialog? Katakanlah Anda memiliki sepuluh dialog berbeda dengan init dan opsi terpisah dan Anda ingin menguji apakah SALAH SATU dialog tersebut terbuka, bukan selektor tertentu?
Kirk Ross
2
Mungkin buat fungsi seperti $ (". Ui-dialog"). Each (function (/ * check this dialog * /))?
marcovtwout
21

Jika Anda ingin memeriksa apakah dialog terbuka pada elemen tertentu, Anda dapat melakukan ini:

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

Atau jika Anda hanya ingin memeriksa apakah elemen itu sendiri terlihat, Anda dapat melakukan:

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

Atau...

if ($('#elem:visible').length) { 
  // do something
}
Nick Craver
sumber
3
Saya memeriksa div saya jika tidak diinisialisasi seperti itu:$dialog.hasClass('ui-dialog-content')
Sergey
Terima kasih, saya tidak bisa mendapatkan jawaban di atas menggunakan "isOpen" untuk saya, tapi ini berhasil.
Kyle Challis
1

Komentar Nick Craver adalah yang paling sederhana untuk menghindari kesalahan yang terjadi jika dialog belum ditentukan:

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

Anda harus mengatur visibilitas di CSS Anda terlebih dahulu, dengan menggunakan:

#elem { display: none; }
pengguna2452922
sumber