Saat ini saya menggunakan jQuery untuk membuat div yang dapat diklik dan dalam div ini saya juga memiliki jangkar. Masalah yang saya hadapi adalah ketika saya mengklik sebuah anchor, kedua event klik itu menyala (untuk div dan anchor). Bagaimana cara mencegah acara onclick div dari menembak ketika jangkar diklik?
Berikut kode yang rusak:
JavaScript
var url = $("#clickable a").attr("href");
$("#clickable").click(function() {
window.location = url;
return true;
})
HTML
<div id="clickable">
<!-- Other content. -->
<a href="http://foo.com">I don't want #clickable to handle this click event.</a>
</div>
sumber
if( e.target !== this) return;
di orangtua lebih baik daripadae.stopPropagation()
di anak karena Anda tidak pernah tahu jika orang lain melampirkan pawang ke anak-anak, atau jika perpustakaan harus melampirkan pawang ke anak (dan Anda tidak ingin mengacaukan dengan kode perpustakaan). Ini adalah pemisahan keprihatinan yang lebih baik.if( e.target !== this) return;
centang di induk berarti bahwa jika salah satu dari anak-anak lain dari orang tua yang tidak memiliki penangan klik sendiri diklik, maka tidak ada yang terjadi. Jadi tidak ada gunanya untuk situasi di mana Anda memiliki misalnya div induk diklik.e.stopPropagation()
bekerja dengan baik.Gunakan metode stopPropagation , lihat contoh:
Seperti yang dikatakan oleh jQuery Docs:
Ingatlah bahwa itu tidak benar menghalangi pendengar lain untuk menangani acara ini (mis. Lebih dari satu penangan klik untuk sebuah tombol), jika itu bukan efek yang diinginkan, Anda harus menggunakannya
stopImmediatePropagation
.sumber
Di sini solusi saya untuk semua orang di luar sana mencari kode non-jQuery (javascript murni)
Kode Anda tidak akan dieksekusi jika diklik pada anak-anak orang tua
sumber
window.event
, yang MDN tidak menyarankan: developer.mozilla.org/en-US/docs/Web/API/Window/event . Jika Anda dapat meluangkan waktu, saya akan sangat menghargai jika Anda dapat berkomentar mengapa Anda menggunakanwindow.event
(mungkin itu adalah masalah yang ada pada tahun 2015 atau saya gagal memahami alasannya).Anda juga dapat mencoba ini
sumber
Jika Anda tidak berniat untuk berinteraksi dengan elemen dalam / dalam hal apa pun, maka solusi CSS mungkin berguna untuk Anda.
Cukup atur elemen dalam ke
pointer-events: none
dalam kasus Anda:
atau untuk menargetkan semua elemen dalam secara umum:
Peretasan mudah ini menyelamatkan saya banyak waktu saat berkembang dengan ReactJS
Dukungan peramban dapat ditemukan di sini: http://caniuse.com/#feat=pointer-events
sumber
Jika Anda memiliki banyak elemen di div yang dapat diklik, Anda harus melakukan ini:
sumber
Menggunakan
return false;
ataue.stopPropogation();
tidak akan membiarkan kode lebih lanjut dieksekusi. Ini akan berhenti mengalir pada titik ini sendiri.sumber
Menulis jika ada yang butuh (bekerja untuk saya):
Dari solusi ini .
sumber
Alternatif Sebaris:
sumber
Berikut ini contoh menggunakan Angular 2+
Misalnya, jika Anda ingin menutup Komponen Modal jika pengguna mengklik di luarnya:
sumber
Anda harus menghentikan acara dari mencapai (menggelegak ke) orang tua (div). Lihat bagian tentang menggelegak di sini , dan info API khusus jQuery di sini .
sumber
sumber
Untuk menentukan beberapa sub elemen sebagai tidak dapat ditulis, tulis hierarki css seperti pada contoh di bawah ini.
Dalam contoh ini saya menghentikan propagasi ke elemen (*) di dalam td di dalam tr di dalam tabel dengan kelas ".subtable"
sumber
AbaikanParent () adalah solusi JavaScript murni.
Ini berfungsi sebagai lapisan perantara yang membandingkan koordinat klik mouse dengan koordinat elemen anak. Dua langkah implementasi sederhana:
1. Masukkan kode ignParent () pada halaman Anda.
2. Alih-alih onclick asli orang tua = "parentEvent ();" , menulis:
Anda dapat mengirimkan ID dari sejumlah elemen anak ke fungsi, dan mengecualikan yang lain.
Jika Anda mengklik salah satu elemen anak, acara induk tidak menyala. Jika Anda mengklik orangtua, tetapi tidak pada salah satu elemen anak [disediakan sebagai argumen], acara induk dipecat.
kode ignParent () pada Github
sumber
Jika berada dalam konteks sebaris, dalam HTML coba ini:
sumber
Jika seseorang memiliki masalah ini menggunakan Bereaksi, ini adalah bagaimana saya menyelesaikannya.
scss:
Pembuatan komponen ():
Dengan menambahkan fungsi onClick untuk aktivitas klik mouse modal anak (konten div) dicegah untuk mencapai fungsi 'closeLogin' dari elemen induk.
Ini melakukan trik untuk saya dan saya dapat membuat efek modal dengan 2 div sederhana.
sumber
tambahkan
a
sebagai berikut:atau
return false;
dari click handler untuk#clickable
like:sumber
Semua solusi itu rumit dan jscript. Ini adalah versi paling sederhana:
sumber
sumber