Saya mempunyai beberapa kod di mana saya mengulangi semua kotak pilihan pada halaman dan membuat beberapa pelarasan .hover
事件绑定到它们,以在 mouse on/off
pada lebarnya.
Ini berlaku selepas halaman siap dan berfungsi dengan baik.
Masalah yang saya hadapi ialah mana-mana kotak pilihan yang ditambahkan melalui Ajax atau DOM selepas gelung awal tidak mempunyai peristiwa terikat.
Saya telah menemui pemalam ini (jQuery Live Query Plugin), tetapi sebelum saya menggunakan pemalam itu untuk menambah 5k lagi pada halaman saya, saya ingin melihat sama ada sesiapa tahu cara melakukannya, sama ada secara terus menggunakan jQuery atau melalui pilihan lain.
jQuery.fn.on
mempunyai penjelasan yang baik dalam dokumentasi.Ringkasnya:
Jadi dalam contoh di bawah
#dataTable tbody tr
mesti wujud sebelum kod dijana.Jika HTML baharu disuntik ke dalam halaman, sebaiknya lampirkan pengendali acara menggunakan acara yang diwakilkan, seperti yang diterangkan di bawah.
Kelebihan acara yang diwakilkan ialah mereka boleh mengendalikan acara daripada unsur keturunan yang kemudiannya ditambahkan pada dokumen. Sebagai contoh, jika jadual wujud tetapi baris ditambah secara dinamik menggunakan kod, perkara berikut akan mengendalikannya:
Selain dapat mengendalikan acara pada elemen keturunan yang belum dicipta, satu lagi kelebihan acara yang diwakilkan ialah ia boleh mengurangkan overhed apabila banyak elemen perlu dipantau. Pada jadual data dengan 1,000 baris dalam
tbody
, contoh kod pertama melampirkan pengendali kepada 1,000 elemen.Kaedah acara perwakilan (contoh kod kedua) hanya melampirkan pengendali acara pada satu elemen
yang diklik ketbody
,并且该事件只需要向上冒泡一级(从单击的tbody
到tbody
dan acara hanya perlu naik satu tahap (dari). Nota: Acara perwakilan tidak berfungsi dengan SVG🎜. 🎜
Bermula dari jQuery 1.7, anda harus menggunakan
jQuery.fn.on
dan mengisi parameter pemilih:Arahan:
Ini dipanggil delegasi acara dan ia berfungsi seperti ini. Acara ini dilampirkan pada induk statik (
staticAncestors
)。每次在此元素或后代元素之一上触发事件时,都会触发此 jQuery 处理程序。然后,处理程序检查触发事件的元素是否与您的选择器匹配(dynamicChild
) elemen yang harus dikendalikan. Apabila terdapat perlawanan, fungsi pengendali tersuai anda dilaksanakan.Sehingga itu, kaedah yang disyorkan ialah menggunakan
live()
:Walau bagaimanapun,
, dan dialih keluar sepenuhnya dalam 1.9.live()
在 1.7 中已被弃用,取而代之的是on()
,并在 1.9 中完全删除。live()
telah ditamatkan dalam 1.7, digantikan denganTandatangan:
on()
...boleh digantikan dengantandatangan berikut:
dosomething
的元素,您可以将事件绑定到已经存在的父级(这是问题的核心,您需要一些东西存在绑定到,不绑定到动态内容),这可以(也是最简单的选项)是document
。但请记住document
Sebagai contoh, jika halaman anda mencipta elemen secara dinamik dengan nama kelas (tidak terikat kepada kandungan dinamik), ini boleh (dan merupakan pilihan yang paling mudah) menjadidokumen
mungkin bukan Pilihan yang paling berkesan .