Dalam pengalaman saya, input type="text"
onchange
peristiwa biasanya terjadi hanya setelah Anda meninggalkan ( blur
) kontrol.
Apakah ada cara untuk memaksa browser untuk memicu onchange
setiap kali textfield
konten berubah? Jika tidak, apa cara paling elegan untuk melacak "secara manual" ini?
Menggunakan onkey*
acara tidak dapat diandalkan, karena Anda dapat mengklik kanan bidang dan memilih Tempel, dan ini akan mengubah bidang tanpa input keyboard apa pun.
Apakah setTimeout
satu-satunya jalan? .. Jelek :-)
javascript
html
forms
Ilya Birman
sumber
sumber
Jawaban:
Memperbarui:
Lihat jawaban lain (2015).
Jawaban Asli 2009:
Jadi, Anda ingin
onchange
acara tersebut diaktifkan pada keydown, blur, dan paste? Itu ajaib.Jika Anda ingin melacak perubahan saat diketik, gunakan
"onkeydown"
. Jika Anda perlu menjebak operasi tempel dengan mouse, gunakan"onpaste"
( IE , FF3 ) dan"oninput"
( FF, Opera, Chrome, Safari 1 ).1 Rusak untuk
<textarea>
di Safari. GunakantextInput
sebagai gantinyasumber
onkeypress
harus digunakan sebagai gantionkeydown
.onkeydown
kebakaran ketika kunci diklik. Jika pengguna menekan tombol, acara hanya akan diaktifkan sekali untuk karakter pertama.onkeypress
kebakaran setiap kali char ditambahkan ke bidang teks.onchange
menembak semua tindakan itu.<input onchange="doSomething();" onkeypress="this.onchange();" onpaste="this.onchange();" oninput="this.onchange();">
akan cukup baik untuk sebagian besar.$().on('change keydown paste input', function() {})
Hari-hari ini dengarkan
oninput
. Rasanya sepertionchange
tanpa perlu kehilangan fokus pada elemen. Itu adalah HTML5.Ini didukung oleh semua orang (bahkan ponsel), kecuali IE8 dan di bawah. Untuk IE tambahkan
onpropertychange
. Saya menggunakannya seperti ini:sumber
oninput
bahkan di IE9 meskipun parsial ( caniuse.com/#feat=input-event ).innerText
di tempatinnerHTML
sehingga setiap markup tidak diberikanKode di bawah ini berfungsi dengan baik untuk saya dengan Jquery 1.8.3
HTML:
<input type="text" id="myId" />
Javascript / JQuery:
sumber
keydown
karena itu akan menduplikasi nilai input, menghapusnya.Javascript tidak dapat diprediksi dan lucu di sini.
onchange
terjadi hanya ketika Anda mengaburkan kotak teksonkeyup
&onkeypress
Tidak selalu terjadi pada perubahan teksonkeydown
terjadi pada perubahan teks (tetapi tidak dapat melacak potong & tempel dengan klik mouse)onpaste
&oncut
Terjadi dengan penekanan tombol dan bahkan dengan klik kanan mouse.Jadi, untuk melacak perubahan di kotak teks, kita perlu
onkeydown
,oncut
danonpaste
. Dalam panggilan balik acara ini, jika Anda memeriksa nilai kotak teks maka Anda tidak mendapatkan nilai yang diperbarui karena nilai diubah setelah panggilan balik. Jadi solusi untuk ini adalah mengatur fungsi batas waktu dengan batas waktu 50 mili-detik (atau mungkin kurang) untuk melacak perubahan.Ini adalah retasan kotor tapi ini satu-satunya cara, seperti yang saya teliti.
Berikut ini sebuah contoh. http://jsfiddle.net/2BfGC/12/
sumber
oninput
dantextInput
peristiwa yang merupakan solusi aktual untuk ini, tetapi tidak didukung oleh semua browser.onkeyup
danonkeydown
, yang serupa. Keduanya dapat menangkap tombol Ctrl, Alt, Shift, dan Meta. Untuk poin peluru ketiga saya anggap Anda maksudkanonkeypress
.onkeyup
terjadi setelah Anda mengetik misalnya saya menekant
ketika saya mengangkat jari tindakan terjadi tetapi padakeydown
tindakan terjadi sebelum saya digit karaktert
Semoga ini bermanfaat bagi seseorang.
Jadi
onkeyup
lebih baik ketika Anda ingin mengirim apa yang baru saja Anda ketik sekarang.sumber
Saya memiliki persyaratan serupa (bidang teks gaya twitter). Digunakan
onkeyup
danonchange
.onchange
sebenarnya menangani operasi tempel mouse selama kehilangan fokus dari lapangan.[Perbarui] Di HTML5 atau lebih baru, gunakan
oninput
untuk mendapatkan pembaruan modifikasi karakter waktu nyata, seperti yang dijelaskan dalam jawaban lain di atas.sumber
oninput
adalah cara untuk pergi. Tetapi, ketika saya menerapkan, HTML5 tidak ada dan kami memiliki IE 8 :(. Saya menghargai pembaruan Anda karena menyediakan informasi terkini untuk pengguna.Saya pikir pada tahun 2018 lebih baik menggunakan
input
acara ini.-
Seperti yang dijelaskan oleh Spesifikasi WHATWG ( https://html.spec.whatwg.org/multipage/indices.html#event-input-input ):
-
Berikut ini contoh cara menggunakannya:
sumber
Jika Anda HANYA menggunakan Internet Explorer, Anda dapat menggunakan ini:
Semoga itu bisa membantu.
sumber
ada solusi yang cukup dekat (jangan memperbaiki semua cara Tempel) tetapi kebanyakan dari mereka:
Ini berfungsi untuk input dan juga untuk textareas:
Lakukan seperti ini:
Seperti yang saya katakan, tidak semua cara untuk Menempelkan peristiwa di semua browser ... terburuk beberapa tidak memadamkan acara sama sekali, tetapi Timer mengerikan untuk digunakan untuk itu.
Tetapi sebagian besar cara Tempel dilakukan dengan keyboard dan / atau mouse, jadi biasanya onkeyup atau onmouseup dipecat setelah ditempelkan, juga onkeyup dipecat saat mengetik pada keyboard.
Pastikan kode cek Anda tidak membutuhkan banyak waktu ... jika tidak, pengguna akan mendapatkan impresi yang buruk.
Ya, triknya adalah menembakkan kunci dan mouse ... tapi waspadalah keduanya dapat dipecat, jadi ingatlah seperti itu !!!
sumber
Tolong, nilai pendekatan berikutnya menggunakan JQuery:
HTML:
Javascript (JQuery):
sumber
"input" bekerja untuk saya.
sumber
Anda bisa menggunakan
keydown
,keyup
dankeypress
acara juga.sumber
Untuk melacak setiap coba contoh ini dan sebelum itu benar-benar mengurangi kursor berkedip ke nol.
onblur: event menghasilkan saat keluar
onchange: event menghasilkan saat keluar jika ada perubahan yang dibuat pada inputtext
onkeydown: event menghasilkan pada sembarang tombol tekan (untuk tahan lama juga)
onkeyup: event menghasilkan pada setiap rilis kunci
onkeypress: sama seperti onkeydown (atau onkeyup) tetapi tidak akan bereaksi untuk ctrl, backsace, alt lainnya
sumber
2018 di sini, inilah yang saya lakukan:
Jika Anda bisa menunjukkan kelemahan dalam pendekatan ini, saya akan berterima kasih.
sumber
Metode 1: Tambahkan pendengar acara untuk
input
:Metode 2: Tentukan
oninput
properti dengan JavaScript:Metode 3: Tentukan
oninput
properti dengan HTML:sumber
Robert Siemer addEventListener tidak didukung di IE8.
"Versi IE yang lebih lama mendukung metode EventTarget.attachEvent () yang setara dan eksklusif." https://developer.mozilla.org/it/docs/Web/API/Element/addEventListener
sumber