* Ini diedit untuk memungkinkan anak-anak dari kelas target untuk memicu acara. Lihat bagian bawah jawaban untuk detailnya. *
Jawaban alternatif untuk menambahkan pendengar acara ke kelas di mana item sering ditambahkan dan dihapus. Ini terinspirasi oleh jQuery'son
fungsi mana Anda bisa memberikan pemilih untuk elemen anak yang didengarkan acara tersebut.
var base = document.querySelector('#base'); // the container for the variable content
var selector = '.card'; // any css selector for children
base.addEventListener('click', function(event) {
// find the closest parent of the event target that
// matches the selector
var closest = event.target.closest(selector);
if (closest && base.contains(closest)) {
// handle class event
}
});
Biola: https://jsfiddle.net/u6oje7af/94/
Ini akan mendengarkan klik pada anak-anak base
elemen dan jika target klik memiliki orangtua yang cocok dengan pemilih, acara kelas akan ditangani. Anda dapat menambah dan menghapus elemen sesuka Anda tanpa harus menambahkan lebih banyak pendengar klik ke masing-masing elemen. Ini akan menangkap mereka semua bahkan untuk elemen yang ditambahkan setelah pendengar ini ditambahkan, sama seperti fungsi jQuery (yang saya bayangkan agak mirip di bawah tenda).
Ini tergantung pada acara yang disebarkan, jadi jika Anda stopPropagation
berada di acara di tempat lain, ini mungkin tidak berfungsi. Juga, closest
fungsi ini memiliki beberapa masalah kompatibilitas dengan IE rupanya (apa yang tidak?).
Ini dapat dibuat menjadi fungsi jika Anda perlu melakukan jenis tindakan mendengarkan berulang kali, seperti
function addChildEventListener(base, eventName, selector, handler) {
base.addEventListener(eventName, function(event) {
var closest = event.target.closest(selector);
if (closest && base.contains(closest)) {
// passes the event to the handler and sets `this`
// in the handler as the closest parent matching the
// selector from the target element of the event
handler.call(closest, event);
}
});
}
=========================================
Edit: Posting ini awalnya menggunakan matches
fungsi untuk Elemen DOM pada target acara, tetapi ini membatasi target acara hanya untuk kelas langsung. Ini telah diperbarui untuk menggunakan closest
fungsi sebagai gantinya, memungkinkan untuk acara pada anak-anak dari kelas yang diinginkan untuk memicu acara juga. matches
Kode asli dapat ditemukan di biola asli:
https://jsfiddle.net/u6oje7af/23/