Rumah >hujung hadapan web >tutorial js >Mengapa Pendengar Acara JavaScript Saya Tidak Berfungsi pada Elemen Dicipta Secara Dinamik, dan Bagaimana Saya Boleh Membetulkannya Menggunakan Perwakilan Acara?

Mengapa Pendengar Acara JavaScript Saya Tidak Berfungsi pada Elemen Dicipta Secara Dinamik, dan Bagaimana Saya Boleh Membetulkannya Menggunakan Perwakilan Acara?

DDD
DDDasal
2024-12-17 21:21:10136semak imbas

Why Doesn't My JavaScript Event Listener Work on Dynamically Created Elements, and How Can I Fix It Using Event Delegation?

Pengendalian Acara Dinamik dalam JavaScript

Apabila bekerja dengan aplikasi web, selalunya perlu mencipta dan memanipulasi elemen pada halaman secara dinamik. Walau bagaimanapun, melampirkan pengendali acara pada elemen yang dicipta secara dinamik boleh mencabar.

Isunya

Dalam coretan kod yang disediakan, butang HTML dicipta secara dinamik dan dimasukkan ke dalam DOM . Pendengar acara kemudian dilampirkan pada butang ini, tetapi pengendali acara tidak dicetuskan apabila butang itu diklik.

Delegasi Acara

Masalahnya ialah pendengar acara dilampirkan pada butang sebelum ia ditambahkan pada DOM. Apabila butang dibuat secara dinamik, ia dilampirkan pada DOM kemudian, tetapi panggilan pendengar acara telah berlaku.

Penyelesaian untuk perkara ini ialah perwakilan acara. Delegasi acara melibatkan melampirkan pendengar acara pada elemen induk dan bukannya terus pada elemen sasaran. Apabila peristiwa berlaku, acara itu disebarkan ke atas pepohon DOM sehingga ia mencapai elemen induk dengan pendengar acara yang dilampirkan.

Contoh

document.addEventListener("click", function(e) {
  const target = e.target.closest("#btnPrepend"); // Or any other selector.

  if (target) {
    // Do something with `target`.
  }
});

Dalam contoh ini , kaedah terdekat() digunakan untuk menentukan sama ada peristiwa klik berlaku dalam elemen #btnPrepend atau keturunannya. Jika ya, pembolehubah sasaran akan merujuk elemen yang telah diklik.

Alternatif jQuery

jQuery memudahkan delegasi acara dengan kaedah on().

$(document).on("click", "#btnPrepend", function() {
  // Do something with `$(this)`.
});

Kesimpulan

Delegasi acara menyediakan kaedah yang boleh dipercayai untuk melampirkan pengendali acara pada elemen yang dicipta secara dinamik. Dengan melampirkan pendengar acara pada elemen induk, ia memastikan pengendali acara akan dicetuskan walaupun elemen sasaran ditambahkan pada DOM kemudian.

Atas ialah kandungan terperinci Mengapa Pendengar Acara JavaScript Saya Tidak Berfungsi pada Elemen Dicipta Secara Dinamik, dan Bagaimana Saya Boleh Membetulkannya Menggunakan Perwakilan Acara?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn