Saya memiliki widget yang memiliki kontrol javascript yang menyertainya.
Jika widget hadir saat halaman admin widget dimuat, kontrol berfungsi dengan benar.
Ketika saya menambahkan widget baru, mereka tidak berfungsi dengan benar, saya mendapatkan markup, tetapi tidak ada efek javascript yang berlaku.
Jika saya menyimpan widget baru, ketika formulir dimuat kembali, kontrol dibuat dengan benar dan sekarang berfungsi.
Menyegarkan halaman juga memperbaiki masalah, tetapi hanya untuk widget yang ada. Widget baru masih memiliki masalah ini.
Secara khusus saya menjalankan pilih pada input pilih pada titik-titik ini:
- dokumen siap
- Lengkap ajax
Saya telah memverifikasi bahwa kode saya dijalankan pada setiap acara seperti yang diinginkan, tetapi hasilnya tidak seperti yang diharapkan.
Berikut ini adalah plugin pengujian yang menunjukkan masalah ini:
https://gist.github.com/Tarendai/8466299
Anda akan melihat saya memiliki penghitung yang bertambah dengan setiap elemen pilih yang ditemukannya dapat dikonversi.
Catatan:
- Ketika halaman widget dimuat, saya bisa melihat penghitung meningkat di konsol JS seperti yang diharapkan
- Ketika saya menambahkan widget baru, kode dijalankan, namun gagal menemukan elemen pilih yang dapat dijalankan, seperti yang ditunjukkan oleh found.length menjadi 0. Ini tidak boleh terjadi, karena setiap widget baru dari jenis itu harus memiliki elemen pilih
- elemen pilih memiliki kelas untuk mengidentifikasi mereka, kelas ini dihapus setelah perpustakaan pilihize diterapkan untuk mencegah duplikasi dan pemrosesan ulang pada widget yang ada.
- Sebelum menggunakan selectize, saya menggunakan Select2, yang memiliki masalah yang sama
- Mengomentari kode AJAX, saya berharap widget baru memiliki input pilih standar. Mereka tidak. Saya tidak tahu mengapa ini terjadi
Jadi, bagaimana cara membuat kontrol pilih bekerja tanpa menyuruh pengguna menyegarkan / mengklik simpan sebelum membuat perubahan?
jQuery( document ).ajaxStop( function() {
bagian tersebut sehingga saya bisa menginisialisasi kontrol di widget yang baru dimuat. Namun jika saya menghapus baris itu saya akan berharap widget baru untuk memiliki input pilih HTML standar, tetapi mereka tidak = s
widget-updated
dan widget-added
acara. Saya juga ingin menekankan, dalam kode @michaeljames, penggunaan elemen id #widgets-right
. Pastikan untuk menggunakannya untuk menargetkan elemen widget aktif di dalam kode JS Anda, jika tidak, Anda bisa mendapatkan elemen duplikat karena kode Anda juga dapat memilih elemen widget tidak aktif tersembunyi di sisi kiri layar (dan elemen-elemen itu dikloning ketika widget ditambahkan).
.on()
metode jQuerys . Yang mengharuskan Anda untuk mengikat suatu acara ke dokumen. Namun acara apa yang akan tepat saya tidak yakin sekarang. Pada akhirnya itu karena binding asli Anda mewakili versi awal DOM ketika halaman dimuat dan sebagian besar tidak mengetahui elemen baru (konten widget) yang ditambahkan melalui ajax. Semoga itu akan mengarahkan Anda ke arah yang benar, jika tidak saya bisa menjawab lebih baik ketika saya sedang bekerja.