Saat menggunakan jquery .change
pada suatu input
acara hanya akan dipecat ketika input kehilangan fokus
Dalam kasus saya, saya perlu melakukan panggilan ke layanan (periksa apakah nilainya valid) segera setelah nilai input diubah. Bagaimana saya bisa mencapai ini?
javascript
jquery
html
Banshee
sumber
sumber
Jawaban:
DIPERBARUI untuk klarifikasi dan contoh
contoh: http://jsfiddle.net/pxfunc/5kpeJ/
Metode 1.
input
acaraDi browser modern gunakan
input
acara tersebut. Acara ini akan diaktifkan saat pengguna mengetik ke bidang teks, menempelkan, membatalkan, pada dasarnya kapan saja nilai berubah dari satu nilai ke nilai lain.Di jQuery lakukan itu seperti ini
dimulai dengan jQuery 1.7, ganti
bind
denganon
:Metode 2.
keyup
acaraUntuk browser lama gunakan
keyup
acara (ini akan menyala setelah tombol pada keyboard telah dirilis, acara ini dapat memberikan semacam false positive karena ketika "w" dirilis nilai input diubah dankeyup
acara menyala, tetapi juga ketika Tombol "shift" dilepaskan saatkeyup
kebakaran terjadi tetapi tidak ada perubahan yang dilakukan pada input.) Metode ini juga tidak memecat jika pengguna mengklik kanan dan menempelkan dari menu konteks:Metode 3. Timer (
setInterval
atausetTimeout
)Untuk menyiasati keterbatasan
keyup
Anda dapat mengatur timer untuk secara berkala memeriksa nilai input untuk menentukan perubahan nilai. Anda dapat menggunakansetInterval
atausetTimeout
melakukan pemeriksaan pengatur waktu ini. Lihat jawaban yang ditandai pada pertanyaan SO ini: jQuery mengubah acara teks atau melihat biola untuk contoh kerja menggunakanfocus
danblur
acara untuk memulai dan menghentikan timer untuk bidang input tertentusumber
innerText
atauvalue
(mensimulasikan input pengguna) yang akan memicu peristiwa MutationObserver jsfiddle.net/pxfunc/ 04chgpws / 1 (lihat console.log untuk pendataan acara MutationObserver). Apakah Anda memiliki test case yang berbeda yang dapat saya lihat?Jika Anda punya HTML5:
oninput
(Kebakaran hanya ketika perubahan benar-benar terjadi, tetapi segera melakukannya)Jika tidak, Anda perlu memeriksa semua peristiwa ini yang mungkin mengindikasikan perubahan pada nilai elemen input:
onchange
onkeyup
( belumkeydown
ataukeypress
karena nilai input belum memiliki penekanan tombol baru di dalamnya)onpaste
(ketika didukung)dan mungkin:
onmouseup
(Saya tidak yakin tentang ini)sumber
Dengan HTML5 dan tanpa menggunakan jQuery, Anda dapat menggunakan
input
acara :Ini akan menyala setiap kali teks input berubah.
Didukung di IE9 + dan browser lainnya.
Cobalah langsung di jsFiddle di sini .
sumber
Seperti yang sudah disarankan orang lain, solusi dalam kasus Anda adalah mengendus beberapa peristiwa .
Pengaya yang melakukan pekerjaan ini sering mendengarkan acara berikut:
Jika menurut Anda itu cocok, Anda dapat menambahkan
focus
,blur
dan acara lainnya juga.Saya menyarankan untuk tidak melebihi dalam acara untuk mendengarkan, karena memuat dalam memori browser prosedur lebih lanjut untuk mengeksekusi sesuai dengan perilaku pengguna.
Perhatian: perhatikan bahwa mengubah nilai elemen input dengan JavaScript (mis. Melalui
.val()
metode jQuery ) tidak akan memecat salah satu peristiwa di atas.(Referensi: https://api.jquery.com/change/ ).
sumber
.val()
misalnya untuk acara perubahan pada bidang input, Anda akan melakukan sesuatu seperti ini ...$('#element').val(whatever).change()
Jika Anda ingin acara dipecat setiap kali ada perubahan dalam elemen maka Anda bisa menggunakan acara keyup .
sumber
onchange
, atau melacak negara sendiri.keydown
tidak berfungsi karena menyala sebelum kondisi input diubah.// .blur dipicu saat elemen kehilangan fokus
// Untuk memicu secara manual gunakan:
sumber
Ada acara jQuery seperti keyup dan penekanan tombol yang dapat Anda gunakan dengan masukan Elemen HTML. Anda juga bisa menggunakan acara blur () .
sumber
keypress
acara karena tombol yang ditekan belum akan mengubah nilai itu.Ini mencakup setiap perubahan pada input menggunakan jQuery 1.7 ke atas:
sumber