Logika dalam change()
event handler tidak dijalankan ketika nilai ditetapkan oleh val()
, tetapi dijalankan ketika pengguna memilih nilai dengan mouse mereka. Kenapa ini?
<select id="single">
<option>Single</option>
<option>Single2</option>
</select>
<script>
$(function() {
$(":input#single").change(function() {
/* Logic here does not execute when val() is used */
});
});
$("#single").val("Single2");
</script>
Saya yakin Anda dapat memicu acara perubahan secara manual dengan
trigger()
:Meskipun mengapa itu tidak menyala secara otomatis, saya tidak tahu.
sumber
$('#foo').change(function() { $( this ).val( 'whatever' ); });
Menambahkan potongan kode ini setelah val () tampaknya berfungsi:
sumber
$(":input#single")
. Sebenarnya Anda tidak seharusnya melakukannya. Hanya rantai setelah.val()
. Anda bisa menggunakan.trigger('change')
atau.change()
. Mereka sama persis.Sejauh yang saya bisa baca di API. Acara ini hanya dipecat ketika pengguna mengklik opsi.
http://api.jquery.com/change/
sumber
input
elemen, bukan ketika elemen kehilangan fokus. Apakah anda tahuUntuk membuatnya lebih mudah, tambahkan fungsi kustom dan panggil kapan saja Anda inginkan bahwa mengubah nilai juga memicu perubahan
dan
Atau Anda dapat mengganti fungsi val untuk selalu memanggil perubahan saat val dipanggil
Contoh di http://jsfiddle.net/r60bfkub/
sumber
change
-event atas kontrol dan menjalankan callback yang (langsung atau tidak langsung) memicu lagichange
-event atas kontrol yang sama. Saya menyarankan Anda untuk menggunakan nama lain untuk acara yang Anda memicu secara manual (misalnyaexplicit.change
), sehingga tidak memicu kembalichange
-Event, mencegah loop, dan masih memungkinkan Anda untuk bereaksi terhadap acara tersebut.Jika Anda tidak ingin bergabung dengan acara perubahan standar, Anda dapat menyediakan acara khusus Anda
untuk memicu acara pada nilai yang ditetapkan, Anda bisa melakukannya
sumber
Saya mengalami masalah yang sama saat menggunakan CMB2 dengan Wordpress dan ingin menghubungkan ke acara perubahan dari file upload metabox.
Jadi jika Anda tidak dapat mengubah kode yang meminta perubahan (dalam hal ini skrip CMB2), gunakan kode di bawah ini. Pemicu sedang dipanggil SETELAH nilai ditetapkan, jika tidak, eventHandler perubahan Anda akan berfungsi, tetapi nilainya akan menjadi yang sebelumnya, bukan yang ditetapkan.
Berikut kode yang saya gunakan:
sumber
this.selector
di dalam$.fn.val
fungsi utama , untuk pemilih tertentu (akan tergantung pada apa yang digunakan untuk pemilih). Ini adalah yang terbaik yang saya temukan untuk melakukan ini hanya untuk bidang tertentu, satu-satunya masalah adalah Anda harus tahu apa yang mereka gunakan untuk pemilihIni berhasil untuk skrip saya. Saya punya 3 kombo & ikat dengan acara chainSelect, saya harus memberikan 3 nilai dengan url & default pilih semua drop down. Saya menggunakan ini
Dan acara pertama berhasil.
sumber
Jika Anda baru saja menambahkan opsi pilih ke formulir dan Anda ingin memicu acara perubahan, saya telah menemukan setTimeout diperlukan jika tidak, jQuery tidak mengambil kotak pilih yang baru ditambahkan:
sumber