Saya ingin memiliki beberapa fungsi yang digunakan jika saya menulis
<textarea maxlength="50"></textarea>
<textarea maxlength="150"></textarea>
<textarea maxlength="250"></textarea>
secara otomatis akan memaksakan maxlength pada textArea. Jika memungkinkan jangan berikan solusi di jQuery.
Catatan: Ini bisa dilakukan jika saya melakukan sesuatu seperti ini:
<textarea onkeypress="return imposeMaxLength(event, this, 110);" rows="4" cols="50">
function imposeMaxLength(Event, Object, MaxLen)
{
return (Object.value.length <= MaxLen)||(Event.keyCode == 8 ||Event.keyCode==46||(Event.keyCode>=35&&Event.keyCode<=40))
}
Disalin dari Apa cara terbaik untuk meniru atribut input HTML "maxlength" pada textarea HTML?
Tetapi intinya adalah saya tidak ingin menulis onKeyPress dan onKeyUp setiap kali saya mendeklarasikan textArea.
javascript
html
textarea
Rakesh Juyal
sumber
sumber
Jawaban:
sumber
onblur
tidak akan menangani pasta sampai pengguna mengklik keluar dari area teks.onkeyup
tidak akan menangani paste jika dilakukan melalui menu konteks atau menu browser. Pendekatan ini berfungsi jika Anda tidak perlu menyaring untuk menempel. Lihat jawaban ini untuk pendekatan berbasis pengatur waktu stackoverflow.com/a/10390626/1026459Saya tahu Anda ingin menghindari jQuery, tetapi karena solusinya memerlukan JavaScript, solusi ini (menggunakan jQuery 1.4) adalah yang paling ringkas dan kuat.
Terinspirasi oleh, namun merupakan peningkatan dari jawaban Dana Woodman:
Perubahan dari jawaban itu adalah: Sederhana dan lebih umum, menggunakan jQuery.live dan juga tidak menyetel val jika panjangnya OK (mengarah ke tombol panah yang berfungsi di IE, dan speedup yang terlihat di IE):
EDIT: Versi terbaru untuk jQuery 1.7+ , gunakan
on
sebagai penggantilive
sumber
Perbarui Gunakan solusi Eirik menggunakan
.live()
sebagai gantinya karena sedikit lebih kuat.Meskipun Anda menginginkan solusi yang tidak menggunakan jQuery, saya pikir saya akan menambahkannya untuk siapa pun yang menemukan halaman ini melalui Google dan mencari solusi jQuery-esque:
Semoga bermanfaat bagi Anda para Googler di luar sana ...
sumber
HTML5 menambahkan
maxlength
atribut ketextarea
elemen, seperti:Ini saat ini didukung di Chrome 13, FF 5, dan Safari 5. Tidak mengherankan, ini tidak didukung di IE 9. (Diuji di Win 7)
sumber
Solusi ini menghindari masalah di IE di mana karakter terakhir dihapus ketika karakter di tengah teks ditambahkan. Ini juga berfungsi dengan baik dengan browser lain.
Validasi formulir saya kemudian menangani masalah apa pun di mana pengguna mungkin telah menempelkan teks (tampaknya hanya menjadi masalah di IE) melebihi panjang maksimum textarea.
sumber
Ini adalah beberapa kode tweak yang baru saja saya gunakan di situs saya. Ini ditingkatkan untuk menampilkan jumlah karakter yang tersisa kepada pengguna.
(Maaf lagi untuk OP yang tidak meminta jQuery. Tapi serius, siapa yang tidak menggunakan jQuery akhir-akhir ini?)
Belum diuji dengan karakter multi-byte internasional, jadi saya tidak yakin bagaimana cara kerjanya dengan tepat.
sumber
Tambahkan juga acara berikut untuk menangani penempelan ke dalam textarea:
sumber
dari Atribut HTML maxlength w3schools.com
Untuk IE8 atau versi sebelumnya, Anda harus menggunakan yang berikut ini
PS
dari Atribut HTML maxlength w3schools.com
sumber
Solusi yang lebih baik dibandingkan dengan memangkas nilai textarea.
sumber
Anda dapat menggunakan jQuery untuk membuatnya mudah dan jelas
JSFiddle DEMO
Ini diuji dalam
Firefox
,Google Chrome
danOpera
sumber
text
diisi dengan "nilai" dari texarea sebelum diperbarui. Ini berarti tes Anda seharusnyaif( text.length +1 > maxlength) {return false;}
. Jika tidak, seseorang hanya akan dapat memasukkanmaxlength - 1
karakter ke dalam:/
if(text.length+1 > maxlength)
atauif(text.length >= maxlength)
...Masalah kecil dengan kode di atas adalah bahwa val () tidak memicu peristiwa change (), jadi jika Anda menggunakan backbone.js (atau kerangka kerja lain untuk pengikatan model), model tidak akan diperbarui.
Saya memposting solusi bekerja sangat baik untuk saya.
sumber
Saya menerapkan
maxlength
perilakutextarea
baru-baru ini, dan mengalami masalah yang dijelaskan dalam pertanyaan ini: Chrome menghitung karakter yang salah dalam textarea dengan atribut maxlength .Jadi semua implementasi yang tercantum di sini akan bekerja dengan sedikit bug. Untuk mengatasi masalah ini saya tambahkan
.replace(/(\r\n|\n|\r)/g, "11")
sebelumnya.length
. Dan selalu diingat saat memotong tali.Saya mengakhirinya dengan sesuatu seperti ini:
Tidak yakin apakah itu menyelesaikan masalah sepenuhnya, tetapi itu berhasil untuk saya untuk saat ini.
sumber
Coba jQuery ini yang berfungsi di IE9, FF, Chrome dan memberikan hitungan mundur kepada pengguna:
sumber
Coba gunakan contoh kode ini:
sumber
Ini jauh lebih mudah:
sumber
maxlength
karena Anda dapat menempelkan string yang lebih panjang dari panjang yang diinginkan.