Jadi saya memiliki menu drop-down yang ditampilkan dengan sekali klik, sesuai kebutuhan bisnis. Menu menjadi tersembunyi lagi setelah Anda mengarahkan mouse menjauh darinya.
Tapi sekarang saya diminta untuk membuatnya tetap di tempatnya sampai pengguna mengklik di mana saja pada dokumen. Bagaimana ini bisa dicapai?
Ini adalah versi sederhana dari apa yang saya miliki sekarang:
$(document).ready(function() {
$("ul.opMenu li").click(function(){
$('#MainOptSubMenu',this).css('visibility', 'visible');
});
$("ul.opMenu li").mouseleave(function(){
$('#MainOptSubMenu',this).css('visibility', 'hidden');
});
});
<ul class="opMenu">
<li id="footwo" class="">
<span id="optImg" style="display: inline-block;"> <img src="http://localhost.vmsinfo.com:8002/insight/images/options-hover2.gif"/> </span>
<ul id="MainOptSubMenu" style="visibility: hidden; top: 25px; border-top: 0px solid rgb(217, 228, 250); background-color: rgb(217, 228, 250); padding-bottom: 15px;">
<li>some</li>
<li>nav</li>
<li>links</li>
</ul>
</li>
</ul>
Saya mencoba sesuatu seperti ini dan $('document[id!=MainOptSubMenu]').click(function()
berpikir itu akan memicu apa pun yang bukan menu, tetapi tidak berhasil.
Jawaban:
Lihatlah pendekatan yang digunakan pertanyaan ini:
Bagaimana cara mendeteksi klik di luar elemen?
sumber
Jawabannya benar, tetapi itu akan menambahkan pendengar yang akan dipicu setiap kali klik terjadi di halaman Anda. Untuk menghindarinya, Anda hanya dapat menambahkan listener satu kali:
Edit: jika Anda ingin menghindari
stopPropagation()
tombol awal, Anda dapat menggunakan inisumber
e.stopPropagation()
di Chrome untuk menghentikan peristiwa pertama dari penembakan dione()
penanganThe
stopPropagation
pilihan yang buruk karena mereka dapat mengganggu penangan event lainnya termasuk menu lain yang mungkin telah terpasang penangan dekat dengan elemen HTML.Berikut adalah solusi sederhana berdasarkan user2989143 's jawabannya:
sumber
Jika menggunakan plugin tidak masalah bagi Anda, maka saya sarankan plugin sisi klik keluar Ben Alman yang terletak di sini :
penggunaannya sesederhana ini:
semoga ini membantu.
sumber
2 opsi yang dapat Anda selidiki:
sumber
Saya menemukan varian solusi Grsmto dan solusi Dennis memperbaiki masalah saya.
sumber
Saya menggunakan solusi ini dengan banyak elemen dengan perilaku yang sama di halaman yang sama:
stopPropagation () adalah ide yang buruk, ini merusak perilaku standar dari banyak hal, termasuk tombol dan tautan.
sumber
$target.closest('#menu-container, #menu-activator').length === 0
Saya baru-baru ini menghadapi masalah yang sama. Saya menulis kode berikut:
Ini telah bekerja untuk saya dengan sempurna.
sumber
bagaimana dengan ini?
sumber
Saya merasa lebih berguna untuk menggunakan mousedown-event daripada click-event. Peristiwa klik tidak berfungsi jika pengguna mengklik elemen lain di halaman dengan peristiwa klik. Dalam kombinasi dengan metode one () jQuery akan terlihat seperti ini:
sumber
bahkan saya menemukan situasi yang sama dan salah satu mentor saya mengungkapkan ide ini kepada diri saya sendiri.
langkah: 1 ketika mengklik tombol di mana kita harus menampilkan menu drop-down. kemudian tambahkan nama kelas di bawah ini "more_wrap_background" ke halaman aktif saat ini seperti yang ditunjukkan di bawah ini
langkah-2 lalu tambahkan klik untuk tag div seperti
dimana hideDropDown adalah fungsi yang dipanggil untuk menyembunyikan menu drop down
Langkah-3 dan langkah penting sambil menyembunyikan menu drop down adalah menghapus kelas yang Anda tambahkan sebelumnya
Saya menghapus dengan menggunakan id-nya pada kode di atas
sumber
Dan lebih baik mengatur pendengar hanya ketika menu Anda sedang terlihat dan selalu menghapus pendengar setelah menu disembunyikan.
sumber
Saya pikir Anda membutuhkan sesuatu seperti ini: http://jsfiddle.net/BeenYoung/BXaqW/3/
Semoga bermanfaat bagi Anda!
sumber
Gunakan pemilih ': terlihat'. Di mana .menuitem adalah elemen yang harus disembunyikan ...
Atau jika Anda sudah memiliki elemen .menuitem di var ...
sumber
Tidak harus rumit.
sumber