Pertimbangkan yang berikut ini:
<div onclick="alert('you clicked the header')" class="header">
<span onclick="alert('you clicked inside the header');">something inside the header</span>
</div>
Bagaimana saya bisa membuatnya sehingga ketika pengguna mengklik rentang, itu tidak memunculkan div
acara klik?
javascript
html
events
dom
Sam
sumber
sumber
event
tampaknya tersedia di acara inline di iOS Safari juga.Ada dua cara untuk mendapatkan objek acara dari dalam suatu fungsi:
Jika Anda perlu mendukung browser lawas yang tidak mengikuti rekomendasi W3C, umumnya di dalam fungsi Anda akan menggunakan sesuatu seperti berikut:
yang akan memeriksa yang pertama, dan yang lain dan menyimpan mana yang ditemukan di dalam variabel acara. Namun dalam event handler inline tidak ada
e
objek untuk digunakan. Dalam hal ini Anda harus mengambil keuntungan dariarguments
koleksi yang selalu tersedia dan merujuk pada set lengkap argumen yang dilewatkan ke fungsi:Namun, secara umum Anda harus menghindari penangan event inline jika Anda perlu melakukan sesuatu yang rumit seperti menghentikan propagasi. Menulis event handler Anda secara terpisah dan melampirkannya ke elemen adalah ide yang jauh lebih baik dalam jangka menengah dan panjang, baik untuk keterbacaan dan pemeliharaan.
sumber
onclick="foo(event)"
lalu dalam fungsifunction foo(event){/* do stuff with event */}
. Ini bekerja di kedua model acara IE dan W3C.Ingatlah bahwa window.event tidak didukung di FireFox, dan karena itu pasti ada sesuatu seperti:
Atau, Anda dapat menggunakan standar W3C untuk FireFox:
Jika Anda ingin menjadi mewah, Anda dapat melakukan ini:
sumber
<div onclick="myEventHandler(event);">
e.cancelBubble
mengembalikan false di IE! Itu tidak dapat mencapaie.cancelBubble = true;
instruksi. Gunakan kondisi SoftwareARM sebagai gantinya !!Gunakan fungsi ini, itu akan menguji keberadaan metode yang benar.
sumber
Saya memiliki masalah yang sama - kotak kesalahan js di IE - ini berfungsi dengan baik di semua browser sejauh yang saya bisa lihat (event.cancelBubble = true melakukan pekerjaan di IE)
sumber
Ini berhasil untuk saya
sumber
Untuk halaman web ASP.NET (bukan MVC), Anda bisa menggunakan
Sys.UI.DomEvent
objek sebagai pembungkus acara asli.atau, meneruskan acara sebagai parameter ke fungsi dalam:
dan dalam beberapa fungsi:
sumber
Menurut halaman ini , di IE Anda perlu:
event.cancelBubble = true
sumber
Saya tidak dapat berkomentar karena Karma jadi saya menulis ini sebagai jawaban keseluruhan: Menurut jawaban Gareth (var e = argumen [0] || window.event; [...]) Saya menggunakan ineliner inline ini pada onclick untuk hack cepat:
Saya tahu ini sudah terlambat, tetapi saya ingin memberi tahu Anda bahwa ini bekerja dalam satu baris. Kawat gigi mengembalikan sebuah acara yang memiliki fungsi stopPropagation terpasang dalam kedua kasus, jadi saya mencoba untuk merangkum mereka dalam kawat gigi seperti di jika dan .... berfungsi. :)
sumber
Ini juga berfungsi - Di tautan gunakan HTML onclick dengan pengembalian seperti ini:
Dan kemudian fungsi comfirmClick () harus seperti:
sumber
confirm
tidak relevan. Saya mengacu pada nilai pengembalian . kutipan: Di tautan HTML gunakan onclick dengan pengembalian seperti iniMengapa tidak memeriksa elemen mana saja yang diklik? Jika Anda mengklik sesuatu,
window.event.target
ditugaskan ke elemen yang diklik, dan elemen yang diklik juga dapat diteruskan sebagai argumen.Jika target dan elemen tidak sama, itu adalah peristiwa yang disebarkan.
sumber
sumber
Solusi terbaik akan ditangani dengan acara melalui fungsi javascript, tetapi untuk menggunakan solusi sederhana dan cepat menggunakan elemen html secara langsung, dan sekali bahwa "event" dan "window.event" sudah usang dan tidak didukung secara universal ( https://developer.mozilla.org/en-US/docs/Web/API/Window/event ), saya sarankan "hard code" berikut:
sumber