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?

Jawaban:


173

Jika Anda membaca dokumen.

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

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


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
}

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
}

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; }
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.