Apa cara termudah dan terbaik untuk memicu perubahan acara saat mengatur nilai elemen pilih .
Saya berharap menjalankan kode berikut
$('select#some').val(10);
atau
$('select#some').attr('value', 10);
akan menghasilkan memicu perubahan acara, yang menurut saya cukup logis untuk dilakukan. Baik?
Yah, bukan itu masalahnya. Anda perlu melakukan triger perubahan () acara dengan melakukan ini
$('select#some').val(10).change();
atau
$('select#some').val(10).trigger('change');
tapi saya sedang mencari beberapa solusi yang akan memicu perubahan acara segera setelah nilai pilih diubah oleh beberapa kode javascript.
Jawaban:
Saya memiliki masalah yang sangat mirip dan saya tidak yakin dengan apa Anda mengalami masalah, karena kode yang disarankan bekerja dengan baik untuk saya. Ini segera (persyaratan dari Anda) memicu kode perubahan berikut.
Lalu saya mengambil nilai dari database (ini digunakan pada formulir untuk input baru dan mengedit catatan yang ada), mengaturnya sebagai nilai yang dipilih, dan menambahkan bagian yang saya lewatkan untuk memicu kode di atas, ".change () ".
Sehingga jika nilai yang ada dari database adalah 'N', itu segera menyembunyikan bidang input sekunder di formulir saya.
sumber
Satu hal yang saya temukan (dengan cara yang sulit), adalah yang seharusnya Anda miliki
didefinisikan SEBELUM Anda gunakan
atau
sumber
change()
sebelum mendefinisikan pendengar dan itu tidak berhasil sampai saya memindahkanchange()
panggilan di bawah pendengar dan itu berhasil. Yah saya akan mengatakan ini seharusnya tidak menjadi masalah, itu hanya masalah cara Anda menyusun kode Anda.Jawaban langsungnya sudah ada dalam pertanyaan rangkap: Mengapa acara jquery mengubah tidak memicu ketika saya menetapkan nilai pilih menggunakan val ()?
Seperti yang Anda ketahui pengaturan nilai tidak memilih memicu perubahan () acara, jika Anda mencari acara yang dipecat ketika nilai elemen telah diubah melalui JS tidak ada.
Jika Anda benar-benar ingin melakukan ini, saya kira satu-satunya cara adalah menulis fungsi yang memeriksa DOM pada interval dan melacak nilai yang berubah, tetapi jelas tidak melakukan ini kecuali Anda harus (tidak yakin mengapa Anda perlu)
Menambahkan solusi ini: Solusi
lain yang mungkin adalah membuat
.val()
fungsi pembungkus Anda sendiri dan memicunya memicu acara khusus setelah menyetel nilainya.val()
, kemudian ketika Anda menggunakan pembungkus .val () Anda untuk menyetel nilai<select>
itu akan memicu acara khusus Anda yang bisa Anda jebak dan tangani.Pastikan untuk
return this
, jadi itu bisa dilakukan dengan jQuerysumber
$('select').val(value).change()
bekerja sepanjang waktu? Adakah penjelasan yang jelas?Saya memisahkannya, dan kemudian menggunakan perbandingan identitas untuk menentukan apa yang akan dilakukan selanjutnya.
sumber
Karena jQuery tidak akan memicu acara perubahan asli tetapi hanya memicu acara perubahannya sendiri. Jika Anda mengikat acara tanpa jQuery dan kemudian menggunakan jQuery untuk memicunya, panggilan balik yang Anda ikat tidak akan berjalan!
Solusinya kemudian seperti di bawah ini (100% berfungsi):
sumber