Saya memiliki Dialog UI jQuery yang ditampilkan ketika elemen tertentu diklik. Saya ingin menutup dialog jika klik terjadi di mana saja selain di elemen pemicu tersebut atau dialog itu sendiri.
Berikut kode untuk membuka dialog:
$(document).ready(function() {
var $field_hint = $('<div></div>')
.dialog({
autoOpen: false,
minHeight: 50,
resizable: false,
width: 375
});
$('.hint').click(function() {
var $hint = $(this);
$field_hint.html($hint.html());
$field_hint.dialog('option', 'position', [162, $hint.offset().top + 25]);
$field_hint.dialog('option', 'title', $hint.siblings('label').html());
$field_hint.dialog('open');
});
/*$(document).click(function() {
$field_hint.dialog('close');
});*/
});
Jika saya menghapus komentar di bagian terakhir, dialog tidak akan pernah terbuka. Saya berasumsi itu karena klik yang sama yang membuka dialog itu menutupnya lagi.
Kode Kerja Akhir
Catatan: Ini menggunakan plugin jQuery outside events
$(document).ready(function() {
// dialog element to .hint
var $field_hint = $('<div></div>')
.dialog({
autoOpen: false,
minHeight: 0,
resizable: false,
width: 376
})
.bind('clickoutside', function(e) {
$target = $(e.target);
if (!$target.filter('.hint').length
&& !$target.filter('.hintclickicon').length) {
$field_hint.dialog('close');
}
});
// attach dialog element to .hint elements
$('.hint').click(function() {
var $hint = $(this);
$field_hint.html('<div style="max-height: 300px;">' + $hint.html() + '</div>');
$field_hint.dialog('option', 'position', [$hint.offset().left - 384, $hint.offset().top + 24 - $(document).scrollTop()]);
$field_hint.dialog('option', 'title', $hint.siblings('label').html());
$field_hint.dialog('open');
});
// trigger .hint dialog with an anchor tag referencing the form element
$('.hintclickicon').click(function(e) {
e.preventDefault();
$($(this).get(0).hash + ' .hint').trigger('click');
});
});
Maaf menyeret ini setelah sekian lama tetapi saya menggunakan yang di bawah ini. Ada kerugian? Lihat fungsi terbuka ...
sumber
$('.ui-widget-overlay').bind('click', function () { $(this).siblings('.ui-dialog').find('.ui-dialog-content').dialog('close'); });
Lupakan menggunakan plugin lain:
Berikut adalah 3 metode untuk menutup dialog UI jquery saat mengklik di luar popin:
Jika dialognya modal / memiliki hamparan latar belakang: http://jsfiddle.net/jasonday/6FGqN/
Jika dialog non-modal Metode 1: metode 1: http://jsfiddle.net/jasonday/xpkFf/
Metode Dialog Non-Modal 2: http://jsfiddle.net/jasonday/eccKr/
sumber
open : function () { $('.ui-widget-overlay').on('click', function () { $(this).parents("body").find(".ui-dialog-content").dialog("close"); }); }
click.myNamespace
Cukup tambahkan skrip global ini, yang menutup semua dialog modal hanya dengan mengklik di luar sana.
sumber
$(document).on('click', '.ui-widget-overlay', function() { $('#'+$('.ui-dialog-content')[0].id).dialog('close'); });
Biola menunjukkan kode di atas beraksi.
sumber
Saya harus melakukan dua bagian. Pertama, penangan klik luar:
Ini memanggil kelas
dialog('close')
generikui-dialog-content
, dan akan menutup semua dialog jika klik tidak berasal dari salah satunya. Ini akan bekerja dengan dialog modal juga, karena overlay bukan bagian dari.ui-dialog
kotak.Masalahnya adalah:
Untuk memperbaikinya, saya harus menambahkan stopPropagation ke penangan klik tersebut:
sumber
$('body').on('click', '.ui-widget-overlay', function () { $('#myDialog').dialog('close'); });
Pertanyaan ini agak lama, tetapi jika seseorang ingin menutup dialog yang BUKAN modal ketika pengguna mengklik di suatu tempat, Anda dapat menggunakan ini yang saya ambil dari plugin JQuery UI Multiselect . Keuntungan utama adalah klik tidak "hilang" (jika pengguna ingin mengklik link atau tombol, tindakan sudah selesai).
sumber
var $dialog = $(this).dialog('widget');
dalam event handler on-clickAnda dapat melakukannya tanpa menggunakan plugin tambahan apa pun
Di sini $ dialog adalah dialognya. Apa yang pada dasarnya kita lakukan adalah mendapatkan widget overlay terakhir setiap kali dialog ini dibuka dan mengikat handler klik ke overlay itu untuk menutup $ dialog seperti kapan pun overlay diklik.
sumber
tidak perlu plugin acara luar ...
cukup tambahkan event handler ke div .ui-widget-overlay:
pastikan saja bahwa pemilih apa pun yang Anda gunakan untuk dialog ui jQuery, juga dipanggil untuk menutupnya .. yaitu # ui-dialog-selector-goes-here
sumber
Ini tidak menggunakan jQuery UI, tetapi menggunakan jQuery, dan mungkin berguna bagi mereka yang tidak menggunakan jQuery UI karena alasan apa pun. Lakukan seperti itu:
Jadi, setelah saya menampilkan dialog, saya menambahkan handler klik yang hanya mencari klik pertama pada apa pun.
Sekarang, akan lebih baik jika saya bisa membuatnya mengabaikan klik pada apa pun di #dialog dan isinya, tetapi ketika saya mencoba mengganti $ ('*') dengan $ (': not ("# dialog, # dialog *") '), masih mendeteksi #klik dialog.
Bagaimanapun, saya menggunakan ini murni untuk lightbox foto, jadi berfungsi dengan baik untuk tujuan itu.
sumber
Contoh yang diberikan menggunakan satu dialog dengan id '#dialog', saya membutuhkan solusi yang menutup dialog apa pun:
Terima kasih kepada kolega saya Youri Arkesteijn atas saran penggunaan prototipe.
sumber
Ini adalah satu-satunya metode yang berhasil untuk saya untuk dialog NON-MODAL saya
Semua kredit masuk ke Axle
Click di luar dialog non-modal untuk menutup
sumber
Bagi Anda yang tertarik, saya telah membuat plugin generik yang memungkinkan untuk menutup dialog saat mengklik di luarnya apakah itu dialog modal atau non-modal. Ini mendukung satu atau beberapa dialog pada halaman yang sama.
Informasi lebih lanjut di sini: http://www.coheractio.com/blog/closing-jquery-ui-dialog-widget-when-clicking-outside
Laurent
sumber
Saya menggunakan solusi ini berdasarkan yang diposting di sini:
sumber
Saya mengalami masalah yang sama saat membuat modal pratinjau di satu halaman. Setelah banyak googling saya menemukan solusi yang sangat berguna ini. Dengan peristiwa dan target, ia memeriksa di mana klik terjadi dan bergantung padanya memicu tindakan atau tidak melakukan apa pun.
Situs Perpustakaan Cuplikan Kode
sumber
Sederhananya sebenarnya Anda tidak memerlukan plugin apa pun, cukup jquery atau Anda dapat melakukannya dengan javascript sederhana.
sumber
Saya tidak berpikir menemukan dialog menggunakan $ ('. Any-selector') dari seluruh DOM begitu cerah.
Mencoba
Anda benar-benar mendapatkan hamparan dari contoh dialog yang dimilikinya, hal ini tidak akan pernah salah.
sumber
Dengan kode berikut, Anda dapat mensimulasikan klik pada tombol 'tutup' dari dialog (ubah string 'MY_DIALOG' untuk nama dialog Anda sendiri)
sumber
Kode Cerdas: Saya menggunakan kode berikut agar semuanya tetap jelas dan dapat dibaca. tubuh bagian luar akan menutup kotak dialog.
sumber
Saya akhirnya menggunakan kode ini yang seharusnya berfungsi pada setiap dialog terbuka di halaman, mengabaikan klik pada tooltips, dan membersihkan sumber daya dari dialog yang ditutup juga.
sumber