Saya memiliki DIV dengan kelas foobar
, dan beberapa DIV di dalam DIV yang tidak kelas, tapi saya kira mereka mewarisi foobar
kelas:
$('.foobar').on('click', function() { /*...do stuff...*/ });
Saya ingin itu untuk mematikan hanya ketika mengklik suatu tempat di DIV tetapi tidak pada anak-anaknya DIV.
===
atau!==
penggunaan yang "ketat Kesetaraan Perbandingan Algoritma" , sedangkan==
dan!=
penggunaan yang "Abstrak Kesetaraan Perbandingan Algoritma" , yang merupakan jenis koersif. Kebijaksanaan umum adalah untuk selalu menggunakan perbandingan ketat kecuali ada kebutuhan khusus untuk tipe paksaan (karena aturannya sedikit rumit) . Dalam hal ini, karena objek dibandingkan, itu benar-benar tidak membuat perbedaan, tetapi Anda akan menemukan bahwa kebanyakan orang masih akan tetap dengan perbandingan yang ketat .Ada cara lain yang berfungsi jika Anda tidak keberatan hanya menargetkan peramban yang lebih baru. Cukup tambahkan CSS
untuk setiap anak dari div yang ingin Anda ambil klik. Inilah tabel dukungan
http://caniuse.com/#feat=pointer-events
sumber
click
pemicu acara klik programatik harus diblokir?Anda dapat menggunakan bubbling sesuai keinginan Anda:
sumber
<a>
elemen turunan . Hanya ada satu masalah: Ketika saya klik tengah pada mereka, acara masih memicu (diuji di Google Chrome). Apakah ada varian dari ini yang juga mencegah ini?Saya tidak mendapatkan jawaban yang diterima untuk bekerja, tetapi ini tampaknya berhasil, setidaknya di vanilla JS.
sumber
this
karena objek yangthis
menunjuk dapat berubah tergantung pada ruang lingkup dan konteks dari mana ia disebutIni akan menghentikan penyebaran (penggelembungan)
click
acara pada salah satu elemen anak-anak dari.foobar
elemen sehingga acara tidak akan mencapai.foobar
elemen untuk memecat event handler mereka.Berikut ini adalah demo: http://jsfiddle.net/bQQJP/
sumber
sumber
Saya memiliki masalah yang sama dan muncul dengan solusi ini (berdasarkan jawaban lain)
Pada dasarnya dikatakan jika targetnya adalah div kemudian jalankan kodenya jika tidak lakukan apa-apa (jangan sembunyikan)
sumber
Kasus saya serupa tetapi ini adalah kesempatan ketika Anda memiliki sedikit
foobar
-s, dan Anda ingin menutup hanya satu - per satu klik:Temukan kasing induk
Temukan kasing anak
sumber
Anda dapat menggunakan event.currentTarget. Ini akan melakukan event klik hanya elemnt yang mendapat acara.
sumber
Jika Anda tidak dapat menggunakan
pointer-events: none;
dan menargetkan browser modern yang dapat Anda gunakancomposedPath
untuk mendeteksi klik langsung pada objek seperti:Anda dapat membaca lebih lanjut tentang compompath di sini: https://developer.mozilla.org/en-US/docs/Web/API/Event/composedPath
sumber
sumber