Di masa lalu, saya menggunakan ikatan jQuery ke acara secara langsung. Namun, pada saat itu, saya tidak menghasilkan elemen DOM secara dinamis, tetapi elemen DOM yang awalnya ada di halaman untuk mengikat acara. Baru -baru ini, ketika saya menguji acara pengikatan DOM yang dihasilkan secara dinamis, saya menemukan bahwa acara tersebut tidak valid, jadi saya mengujinya:
1. Penyebab kegagalan peristiwa:
(1) Ikatan peristiwa pengikat hanya berlaku untuk elemen yang ada di DOM. Itu tidak dapat dipantau untuk elemen yang kami tambahkan secara dinamis nanti, sehingga tidak dapat terikat.
(2) Demikian pula, saat Anda menggunakan var aa = document.geteLementsbyTagname ("elemen yang dihasilkan dinamis"); Untuk mendapatkan elemen yang dihasilkan secara dinamis, karena halaman web hanya akan melakukan pengikatan inisialisasi sekali, dan elemen DOM yang dihasilkan secara dinamis tidak dapat dipantau setelah itu.
2. Solusi:
(1) mengikat lebih banyak peristiwa di setiap tempat yang dihasilkan secara dinamis, seperti contoh di blog ini
(2) Ubah ikatan untuk hidup, karena live dipantau secara real time dan juga efektif untuk elemen DOM yang baru ditambahkan (karena terus mengikat dan penilaian, ini dapat memengaruhi masalah kinerja web)
(3) Ubah ikatan menjadi delegasi, karena delegasi dipantau secara real time.
(4) dalam metode jQuery1.7, Bind (), live () dan delegate () digantikan oleh ON.
3. Regarding the reasons for the recent event failure: In the original web page (the code can be seen at https://github.com/UFOwl/ife/tree/master/stage02/task16), I want to get the delete button dynamically generated in the table to help delete the delete button bind the delete time, but the delete event is invalid because the delete button is dynamically generated. Saat menginisialisasi ikatan peristiwa, tombol di tabel yang diperoleh sudah kosong, sehingga elemen terikat selalu kosong, sehingga tidak ada respons saat mengklik tombol.
4. Solusi terakhir: Pertama dapatkan tabel, lalu ikat peristiwa klik tabel (karena tabel ada di elemen DOM yang sudah ada), dan kemudian menangkap target acara (misalnya, klik tombol di tabel. Pada saat ini, karena tombol telah dihasilkan secara dinamis dan menampilkan pengoperasian yang sesuai.
Catatan: Dua masalah dicatat di sini:
(1) Elemen dalam tabel telah ditambahkan ke tabel, jadi saat mengklik tombol itu, tombol yang Anda dapatkan adalah yang Anda inginkan.
(2) Mengapa tombol telah ditambahkan ke dalam tabel, tetapi masih tidak dapat diperoleh? Karena tombol dalam tabel diperoleh ketika fungsi init () diinisialisasi, tetapi tidak ada operasi yang dilakukan pada saat ini, jadi apa yang diperoleh kosong, jadi tidak ada elemen yang terikat.
Dua masalah yang perlu diperhatikan di atas harus dibedakan dengan jelas, dan ini adalah kunci masalah.
5. Tentang Bind: Setelah setiap acara pengikatan, acara akan terikat. Lepas dan kemudian rebind, jika tidak acara akan selalu ada. Jadi inilah sebabnya ketika mengerjakan suatu proyek, kadang -kadang hasil dari permintaan AJAX akan ditumpangkan seperti 1, 2, 4, 8. Karena jika BIND digunakan, setiap peristiwa pemicu akan terikat pada operasi. Oleh karena itu, ketika pertama kali dipicu, permintaan AJAX akan diminta sekali; Ketika kedua kalinya dipicu, permintaan AJAX akan menjadi 1+1 = 2 kali; Ketiga kalinya adalah 1+2+1 = 4 kali; Keempat kalinya adalah 1+2+4+1 = 8 kali, dan seterusnya. Oleh karena itu, jika Anda menggunakan Bind untuk mengikat acara, terlebih dahulu Anda harus melepaskan peristiwa asli elemen dan kemudian mengikat peristiwa, sehingga permintaan AJAX tidak akan menyebabkan beberapa kali.
Artikel di atas tentang alasan dan solusi untuk kegagalan generasi dinamis dari insiden pengikat DOM adalah semua konten yang dibagikan oleh editor. Saya harap ini dapat memberi Anda referensi dan saya harap Anda akan lebih mendukung wulin.com.