Bisakah kita membuat popover dapat diberhentikan dengan cara yang sama seperti modals, yaitu. membuat mereka tutup ketika pengguna mengklik suatu tempat di luar mereka?
Sayangnya saya tidak bisa hanya menggunakan modal nyata daripada popover, karena modal berarti posisi: tetap dan itu bukan popover lagi. :(
twitter-bootstrap
popover
Ante Vrli
sumber
sumber
data-trigger="hover"
dandata-trigger="focus"
merupakan alternatif bawaan untuk menutup popover, jika Anda tidak ingin menggunakan sakelar. Menurut pendapat saya,data-trigger="hover"
memberikan pengalaman pengguna terbaik ... tidak perlu menulis kode ekstra .js ...Jawaban:
Pembaruan: Solusi yang sedikit lebih kuat: http://jsfiddle.net/mattdlockyer/C5GBU/72/
Untuk tombol yang hanya berisi teks:
Untuk tombol yang berisi ikon digunakan (kode ini memiliki bug di Bootstrap 3.3.6, lihat perbaikan di bawah dalam jawaban ini)
Untuk Penggunaan Popovers Generasi JS
'[data-original-title]'
sebagai pengganti'[data-toggle="popover"]'
Peringatan: Solusi di atas memungkinkan beberapa popover terbuka sekaligus.
Tolong satu popover sekaligus:
Pembaruan: Bootstrap 3.0.x, lihat kode atau biola http://jsfiddle.net/mattdlockyer/C5GBU/2/
Ini menangani penutupan popover yang sudah terbuka dan tidak diklik atau tautannya belum diklik.
Pembaruan: Bootstrap 3.3.6, lihat biola
Memperbaiki masalah di mana setelah penutupan, membutuhkan 2 klik untuk membuka kembali
Pembaruan: Menggunakan persyaratan peningkatan sebelumnya, solusi ini tercapai. Perbaiki masalah klik ganda dan popover hantu:
sumber
$(document)
bukan$('body')
karena kadang-kadangbody
tidak memperpanjang seluruh halaman.'[data-toggle="popover"]'
, yang tidak berfungsi dengan JavaScript yang dihasilkan popovers, saya gunakan'[data-original-title]'
sebagai pemilih.Ini menutup semua popover jika Anda mengklik di mana saja kecuali pada popover
UPDATE untuk Bootstrap 4.1
sumber
Versi paling sederhana, paling aman gagal , bekerja dengan versi bootstrap apa pun.
Demo: http://jsfiddle.net/guya/24mmM/
Demo 2: Tidak menolak ketika mengklik di dalam konten popover http://jsfiddle.net/guya/fjZja/
Demo 3: Beberapa popovers: http://jsfiddle.net/guya/6YCjW/
Cukup menelepon saluran ini akan mengabaikan semua popover:
Singkirkan semua popover saat mengklik di luar dengan kode ini:
Cuplikan di atas melampirkan acara klik di badan. Ketika pengguna mengklik sembulan, itu akan berperilaku seperti biasa. Ketika pengguna mengklik sesuatu yang bukan popover, ia akan menutup semua popover.
Ini juga akan berfungsi dengan popover yang diawali dengan Javascript, sebagai lawan dari beberapa contoh lain yang tidak akan berfungsi. (lihat demo)
Jika Anda tidak ingin mengabaikan ketika mengklik di dalam konten popover, gunakan kode ini (lihat tautan ke demo ke-2):
sumber
!$(e.target).closest('.popover.in').length
akan lebih efisien daripada!$(e.target).parents().is('.popover.in')
.Dengan bootstrap 2.3.2 Anda dapat mengatur pemicu untuk 'fokus' dan hanya berfungsi:
sumber
Ini pada dasarnya tidak terlalu rumit, tetapi ada beberapa pemeriksaan yang harus dilakukan untuk menghindari gangguan.
Demo (jsfiddle)
sumber
popover()
klik bukan melayang?stopPropagation()
acara yang diteruskan ke penangan klik (jika tidak, penangan bersembunyi segera menyembunyikan popover). Demo (jsfiddle)Tidak ada solusi yang seharusnya dipilih untuk saya dengan benar. Masing-masing mengarah ke bug ketika setelah membuka dan menutup (dengan mengklik pada elemen lain) popover untuk pertama kalinya, itu tidak terbuka lagi, sampai Anda membuat dua klik pada tautan memicu bukan satu.
Jadi saya memodifikasinya sedikit:
sumber
Saya membuat jsfiddle untuk menunjukkan kepada Anda bagaimana melakukannya:
http://jsfiddle.net/3yHTH/
Idenya adalah untuk menunjukkan popover ketika Anda mengklik tombol dan untuk menyembunyikan popover ketika Anda mengklik di luar tombol.
HTML
JS
sumber
jsfiddle bootstrap
dan itu memberi saya kerangka bootstrap css + js di jsfiddle.cukup tambahkan atribut ini dengan elemen
sumber
Ini sudah ditanyakan sebelumnya di sini . Jawaban yang sama yang saya berikan kemudian masih berlaku:
Saya memiliki kebutuhan yang sama, dan menemukan ekstensi kecil yang bagus dari Popover Bootstrap Twitter oleh Lee Carmichael, yang disebut BootstrapX - clickover . Dia juga memiliki beberapa contoh penggunaan di sini . Pada dasarnya itu akan mengubah popover menjadi komponen interaktif yang akan ditutup ketika Anda mengklik di tempat lain pada halaman, atau pada tombol tutup di dalam popover. Ini juga akan memungkinkan beberapa popover terbuka sekaligus dan banyak fitur bagus lainnya.
sumber
Ini terlambat ke pesta ... tapi saya pikir saya akan membagikannya. Saya suka popover tetapi memiliki sedikit fungsi bawaan. Saya menulis ekstensi bootstrap .bubble () itulah yang saya inginkan sebagai popover. Empat cara untuk memberhentikan. Klik di luar, aktifkan tautan, klik X, dan tekan escape.
Ini posisi secara otomatis sehingga tidak pernah keluar halaman.
https://github.com/Itumac/bootstrap-bubble
Ini bukan promo mandiri gratis ... Saya sudah sering mengambil kode orang lain dalam hidup saya, saya ingin menawarkan usaha saya sendiri. Berputar dan lihat apakah itu cocok untuk Anda.
sumber
Menurut http://getbootstrap.com/javascript/#popovers ,
Gunakan pemicu fokus untuk mengabaikan popover pada klik berikutnya yang dibuat pengguna.
sumber
<a>
tag, bukan<button>
tag, dan Anda juga harus menyertakanrole="button"
dantabindex
atribut. " Apakah Anda mencobanya dengan spesifikasi ini?Solusi yang diterima dimodifikasi. Apa yang saya alami adalah bahwa setelah beberapa popover disembunyikan, mereka harus diklik dua kali untuk muncul lagi. Inilah yang saya lakukan untuk memastikan popover ('hide') tidak dipanggil pada popover yang sudah tersembunyi.
sumber
Cukup tambahkan atribut ini ke elemen html untuk menutup popover di klik berikutnya.
referensi dari https://getbootstrap.com/docs/3.3/javascript/#popovers
sumber
Solusi ini berfungsi dengan baik:
sumber
sumber
Anda juga dapat menggunakan acara bubbling untuk menghapus sembulan dari DOM. Agak kotor, tetapi berfungsi dengan baik.
Di html Anda, tambahkan kelas .popover-close ke konten di dalam popover yang seharusnya menutup popover.
sumber
Tampaknya metode 'sembunyikan' tidak berfungsi jika Anda membuat popover dengan delegasi pemilih, alih-alih 'hancurkan' harus digunakan.
Saya membuatnya bekerja seperti itu:
JSfiddle di sini
sumber
Kami mengetahui bahwa kami memiliki masalah dengan solusi dari @mattdlockyer (terima kasih atas solusinya!). Saat menggunakan properti pemilih untuk konstruktor popover seperti ini ...
... solusi yang diusulkan untuk BS3 tidak akan berfungsi. Sebaliknya ia membuat contoh popover lokal untuk itu
$(this)
. Inilah solusi kami untuk mencegah hal itu:Sebagaimana disebutkan
$(this).popover('hide');
akan membuat contoh kedua karena pendengar yang didelegasikan. Solusi yang disediakan hanya menyembunyikan popover yang sudah diinstal.Saya harap saya bisa menghemat waktu kalian.
sumber
Bootstrap secara alami mendukung ini :
Demo JS Bin
sumber
solusi ini menghilangkan klik 2 sial saat menampilkan popover untuk kedua kalinya
diuji dengan dengan Bootstrap v3.3.7
sumber
Saya sudah mencoba banyak jawaban sebelumnya, benar-benar tidak ada yang berhasil untuk saya tetapi solusi ini berhasil:
https://getbootstrap.com/docs/3.3/javascript/#dismiss-on-next-click
Ex:
sumber
Saya datang dengan ini: Skenario saya termasuk popover lebih banyak pada halaman yang sama, dan menyembunyikan mereka hanya membuat mereka tidak terlihat dan karena itu, mengklik item di belakang popover itu tidak mungkin. Idenya adalah untuk menandai tautan popover tertentu sebagai 'aktif' dan kemudian Anda cukup 'beralih' popover aktif. Melakukannya akan menutup popover sepenuhnya $ ('. Popover-link'). Popover ({html: true, container: 'body'})
sumber
Saya hanya menghapus popover aktif lainnya sebelum popover baru ditampilkan (bootstrap 3):
sumber
diuji dengan 3.3.6 dan klik kedua ok
sumber
demo: http://jsfiddle.net/nessajtr/yxpM5/1/
}
ini solusi saya untuk itu.
sumber
Pendekatan ini memastikan bahwa Anda dapat menutup popover dengan mengklik di mana saja pada halaman. Jika Anda mengklik entitas yang dapat diklik lainnya, ia menyembunyikan semua popover lainnya. Animasi: false diperlukan jika tidak, Anda akan mendapatkan kesalahan .hapus di konsol Anda.
sumber
Ok ini adalah upaya pertama saya untuk benar-benar menjawab sesuatu di stackoverflow jadi begini saja: P
Tampaknya tidak terlalu jelas bahwa fungsi ini sebenarnya bekerja di luar kotak pada bootstrap terbaru (well, jika Anda bersedia berkompromi di mana pengguna dapat mengklik. Saya tidak yakin apakah Anda harus meletakkan klik ' arahkan kursor per-se tetapi di iPad, klik berfungsi sebagai sakelar.
Hasil akhirnya adalah, pada desktop Anda dapat mengarahkan atau mengklik (sebagian besar pengguna akan mengarahkan). Pada perangkat sentuh, menyentuh elemen akan memunculkannya, dan menyentuhnya lagi akan menjatuhkannya. Tentu saja, ini adalah sedikit kompromi dari persyaratan awal Anda, tetapi setidaknya kode Anda sekarang lebih bersih :)
sumber
Mengambil kode Matt Lockyer, saya telah melakukan reset sederhana sehingga dom tidak tercakup oleh elemen di hide.
Kode Matt: http://mattlockyer.com/2013/04/08/close-a-twitter-bootstrap-popover-when-clicking-outside/
Fiddle: http://jsfiddle.net/mrsmith/Wd2qS/
sumber
Coba ini, ini akan disembunyikan dengan mengklik di luar.
sumber
Saya mengalami masalah dengan solusi mattdlockyer karena saya mengatur tautan popover secara dinamis menggunakan kode seperti ini:
Jadi saya harus memodifikasinya seperti itu. Itu memperbaiki banyak masalah bagi saya:
Ingat bahwa menghancurkan menghilangkan elemen, sehingga bagian pemilih penting untuk menginisialisasi popover.
sumber