Bagaimana cara mendeteksi perubahan acara pada textarea menggunakan javascript?
Saya mencoba mendeteksi jumlah karakter yang tersisa saat Anda mengetik.
Saya mencoba menggunakan acara onchange, tetapi itu tampaknya hanya masuk ketika fokus keluar.
javascript
teepusink
sumber
sumber
onkeyup
adalah peristiwa yang mengerikan untuk deteksi input. Gunakanoninput
danonpropertychange
(untuk dukungan IE).onchange
adalah TIDAK dipecat ketika konteks-menu cut / paste terjadi.Ini tahun 2012, era pasca-PC ada di sini, dan kita masih harus berjuang dengan sesuatu yang mendasar seperti ini. Ini seharusnya sangat sederhana .
Sampai saat impian itu terpenuhi, inilah cara terbaik untuk melakukan ini, lintas-browser: gunakan kombinasi dari
input
danonpropertychange
acara , seperti:The
input
event mengurus IE9 +, FF, Chrome, Opera dan Safari , danonpropertychange
mengurus IE8 (juga bekerja dengan IE6 dan 7, tetapi ada beberapa bug).Keuntungan menggunakan
input
danonpropertychange
adalah mereka tidak memecat secara tidak perlu (seperti ketika menekan tombolCtrl
atauShift
); jadi jika Anda ingin menjalankan operasi yang relatif mahal ketika konten textarea berubah, ini adalah cara untuk pergi .Sekarang IE, seperti biasa, melakukan pekerjaan setengah-setengah untuk mendukung ini: tidak ada
input
atauonpropertychange
di IE ketika karakter dihapus dari textarea. Jadi, jika Anda perlu menangani penghapusan karakter di IE, gunakankeypress
(sebagai lawan dari menggunakankeyup
/keydown
, karena mereka hanya sekali saja memecat meskipun pengguna menekan dan menahan tombol ke bawah).Sumber: http://www.alistapart.com/articles/expanding-text-areas-made-elegant/
EDIT: Tampaknya bahkan solusi di atas tidak sempurna, seperti yang ditunjukkan dengan benar di komentar: keberadaan
addEventListener
properti di textarea tidak menyiratkan Anda bekerja dengan browser yang waras; demikian pula keberadaanattachEvent
properti tidak menyiratkan IE. Jika Anda ingin kode Anda benar-benar kedap udara, Anda harus mempertimbangkan untuk mengubahnya. Lihat komentar Tim Down untuk petunjuk.sumber
addEventListener
tidak menyiratkan dukungan untukinput
acara tersebut, atau sebaliknya); deteksi fitur akan lebih baik. Lihat posting blog ini untuk diskusi tentang ini.oninput
adalah bagaimana kita harus melakukan ini, tetapi Anda mungkin tidak boleh menggunakanaddEventListener
sebagai tes Anda untuk dukungan browser. +1 dalam hal apa pun.keypress
acara tersebut untuk menangani kasus itu di IE9 (dan mungkin versi yang lebih baru juga).input
event handler juga dapat didefinisikan dengan mengimplementasikan.oninput
properti objek.Tidak diuji pada Firefox.
sumber
Saya tahu ini bukan pertanyaan Anda, tetapi saya pikir ini mungkin berguna. Untuk aplikasi tertentu, menyenangkan untuk memiliki fungsi perubahan, tidak setiap kali tombol ditekan. Ini dapat dicapai dengan sesuatu seperti ini:
Ini bekerja dengan menguji apakah peristiwa yang lebih baru telah dipecat dalam periode penundaan tertentu. Semoga berhasil!
sumber
Saya tahu pertanyaan ini khusus untuk JavaScript, namun, sepertinya tidak ada cara yang baik dan bersih untuk SELALU mendeteksi ketika sebuah teks berubah di semua browser saat ini. Saya telah belajar jquery telah merawatnya untuk kita. Bahkan menangani perubahan menu kontekstual ke area teks. Sintaks yang sama digunakan terlepas dari jenis input.
atau
sumber
bind("input cut paste"...
dan berfungsi seperti pesona - mengetik, memotong & menempel menggunakan keyboard atau menu konteks; bahkan drag / drop teks.change
acara untuktextarea
.Anda dapat mendengarkan acara tentang perubahan textarea dan melakukan perubahan seperti yang Anda inginkan. Ini salah satu contohnya.
sumber
Keyup harus memadai jika dipasangkan dengan atribut validasi / pola input HTML5. Jadi, buat pola (regex) untuk memvalidasi input dan bertindak berdasarkan status .checkValidity (). Sesuatu seperti di bawah ini bisa berfungsi. Dalam kasus Anda, Anda ingin regex mencocokkan panjang. Solusi saya sedang digunakan / demo-online di sini .
sumber
Kode yang saya gunakan untuk IE 11 tanpa jquery dan hanya untuk satu textarea:
Javascript:
dan html:
sumber
Coba yang ini. Ini sederhana, dan karena ini 2016 saya yakin itu akan berfungsi pada sebagian besar browser.
sumber
Hal terbaik yang dapat Anda lakukan adalah mengatur fungsi yang akan dipanggil pada jumlah waktu tertentu dan fungsi ini untuk memeriksa konten textarea Anda.
sumber