Rumah > hujung hadapan web > tutorial js > Bagaimana untuk Mengelakkan Perangkap Penutupan Apabila Menjana Pengendali Acara Secara Dinamik dalam JavaScript?

Bagaimana untuk Mengelakkan Perangkap Penutupan Apabila Menjana Pengendali Acara Secara Dinamik dalam JavaScript?

Linda Hamilton
Lepaskan: 2024-11-29 12:34:10
asal
136 orang telah melayarinya

How to Avoid Closure Pitfalls When Dynamically Generating Event Handlers in JavaScript?

Cara Menjana Pengendali Acara Secara Dinamik Menggunakan Gelung dalam Javascript

Dalam senario tertentu, ia menjadi perlu untuk menetapkan pengendali acara kepada satu siri elemen dijana secara dinamik melalui Javascript, sering dirujuk sebagai "gelung melalui pengendali acara." Isu ini timbul apabila elemen yang dijana mempunyai fungsi yang serupa dan memerlukan pengendali acara dengan gelagat unik, berbanding menggunakan pengendali acara sebaris.

Pertimbangkan contoh di mana anda mempunyai 10 teg yang dijana daripada respons AJAX, dan anda ingin menetapkan acara onclick kepada setiap satu daripadanya dalam satu gelung. Kod berikut kelihatan seperti penyelesaian yang mudah:

for (i = 1; i < 11; i++) {
  document.getElementById("b" + i).onclick = function () {
    alert(i);
  };
}
Salin selepas log masuk

Walau bagaimanapun, selepas pelaksanaan, kod ini hanya memberikan acara onclick kepada tag dan memaparkan "11" dalam kotak amaran untuk semua klik. Sebab bagi tingkah laku ini terletak pada fakta bahawa semua pengendali acara berkongsi pembolehubah i yang sama, yang dinaikkan dalam gelung dan akhirnya menunjukkan kepada tag.

Untuk menangani isu ini dan memastikan setiap tag mempunyai pengendali acara uniknya sendiri, anda perlu menentukan fungsi berasingan untuk setiap pengendali dan lulus nilai i sebagai parameter. Dengan berbuat demikian, setiap pengendali akan mempunyai contoh pembolehubah i sendiri, mengekalkan kefungsian yang dimaksudkan:

function handleElement(i) {
  document.getElementById("b" + i).onclick = function () {
    alert(i);
  };
}

for (i = 1; i < 11; i++) {
  handleElement(i);
}
Salin selepas log masuk

Kod yang disemak ini akan menetapkan pengendali acara onclick yang berbeza kepada setiap teg dan apabila tag diklik, nilai i yang betul akan dipaparkan dalam kotak amaran, mencerminkan tingkah laku yang dijangkakan. Teknik ini membolehkan anda menjana pengendali acara secara dinamik untuk satu siri elemen, memastikan pengendalian acara yang betul untuk setiap elemen individu.

Atas ialah kandungan terperinci Bagaimana untuk Mengelakkan Perangkap Penutupan Apabila Menjana Pengendali Acara Secara Dinamik dalam JavaScript?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan