Atribut max tidak berfungsi di browser chrome di tablet android.
Foreever
4
@ ÜnsalKorkmaz: solusi itu memiliki kerugian karena tidak memunculkan tombol angka di perangkat android
Will
Jawaban:
340
Dan Anda dapat menambahkan maxatribut yang akan menentukan angka setinggi mungkin yang dapat Anda masukkan
<inputtype="number"max="999"/>
jika Anda menambahkan a maxdan minnilai, Anda dapat menentukan rentang nilai yang diizinkan:
<inputtype="number"min="1"max="999"/>
Di atas masih tidak akan menghentikan pengguna dari memasukkan nilai secara manual di luar rentang yang ditentukan. Sebagai gantinya, ia akan ditampilkan sembulan yang memberitahukannya untuk memasukkan nilai dalam rentang ini setelah mengirimkan formulir seperti yang ditunjukkan dalam tangkapan layar ini:
Krister, ini berhasil. Juga seperti @Andy berkata saya telah menggunakan oninput untuk memotong nomor tambahan. Referensi mathiasbynens.be/notes/oninput
Prasad
7
@ Paras - Jika jawaban Andy benar, pilihlah, bukan yang paling banyak dipilih.
Moshe
81
Ini benar, tetapi harus dicatat karena Andy menyatakan bahwa ini tidak membatasi seseorang untuk mengetik nomor yang lebih panjang. Jadi itu tidak benar-benar setara dengan maxlength dalam bidang teks.
DA.
9
Jika Anda hanya memasukkan pelampung presisi yang lebih tinggi, ini akan pecah. Misalnya 3.1415926 mengelak karena ini kurang dari 999 dan lebih besar dari 1.
0112
44
Saya tidak tahu mengapa hal ini sangat terangkat dan diterima ketika itu tidak berhasil! Ini hanya memengaruhi kontrol "pemintal", dan tidak melakukan apa pun untuk menghentikan pengguna mengetikkan angka yang panjang.
Codemonkey
115
Anda dapat menentukan atribut mindan max, yang akan memungkinkan input hanya dalam rentang tertentu.
<!-- equivalent to maxlength=4 --><inputtype="number"min="-9999"max="9999">
Ini hanya berfungsi untuk tombol kontrol pemintal. Meskipun pengguna mungkin dapat mengetikkan angka yang lebih besar dari yang diizinkan max, formulir tidak akan mengirimkan.
Cuplikan layar diambil dari Chrome 15
Anda dapat menggunakan oninputacara HTML5 dalam JavaScript untuk membatasi jumlah karakter:
Satu masalah yang mungkin terjadi dengan pendekatan JavaScript: Mungkin tidak berfungsi seperti yang diharapkan jika titik penyisipan tidak ada di akhir nilai. Misalnya, jika Anda memasukkan nilai "1234" di bidang input, lalu pindahkan titik penyisipan kembali ke awal nilai dan ketik "5", Anda berakhir dengan nilai "5123". Ini berbeda dari bidang tipe input = "teks" dengan panjang maksimal 4, di mana browser tidak akan membiarkan Anda mengetik karakter ke-5 ke dalam bidang "penuh", dan nilainya tetap "1234".
Jon Schneider
@Andy, Jelas pertanyaannya adalah mencari cara non-JS untuk melakukan maxlength.............
Pacerier
4
@ Peracerier: apakah sesuatu dalam jawaban saya menyiratkan bahwa saya pikir sebaliknya? Seperti yang Anda lihat, saya menawarkan solusi terdekat yang dapat dicapai dengan hanya menggunakan HTML, bersama dengan saran tambahan yang menggunakan JavaScript di mana OP mungkin ingin mencegah pengguna mengetik lebih banyak karakter daripada yang diizinkan.
Andy E
84
Jika Anda mencari solusi Web Seluler di mana Anda ingin pengguna Anda melihat papan nomor daripada keyboard teks lengkap. Gunakan type = "tel". Ini akan bekerja dengan maxlength yang menyelamatkan Anda dari membuat javascript tambahan.
Maks dan Min masih akan memungkinkan pengguna untuk Mengetik angka lebih dari maks dan min, yang tidak optimal.
Hebat menemukan, ini bekerja seperti pesona, jempol karena tidak harus membuat javascript tambahan.
Diego
9
Saya telah menemukan bahwa ini bukan solusi terbaik untuk input numerik karena input "tel" memungkinkan untuk simbol tambahan, dan ini menampilkan huruf di samping setiap angka. Keyboard murni numerik terlihat jauh lebih bersih.
hawkharris
@hawkharris Anda benar, ketik = "number" adalah UI pembersih. Lebih mudah untuk mengetik karakter buruk secara tidak sengaja. Jadi validasi tambahan diperlukan untuk memastikan pengguna tidak memasukkan data buruk. Tetapi juga pertimbangkan bahwa pengguna dapat dengan mudah memasukkan semua titik desimal juga dengan keyboard angka. Juga tidak menyelesaikan pertanyaan di atas tanpa JavaScript tambahan.
Duane
1
Terima kasih, saya sedang mengerjakan aplikasi seluler kerangka kerja ionik dan ini menyelesaikan masalah saya
Ahmed
1
jika digunakan dengan pattern = "[0-9] *" simbol tambahan akan dinonaktifkan
apereira
71
Anda dapat menggabungkan semua ini seperti ini:
<inputname="myinput_drs"oninput="maxLengthCheck(this)"type="number"maxlength="3"min="1"max="999"/><script>// This is an old version, for a more recent version look at// https://jsfiddle.net/DRSDavidSoft/zb4ft1qq/2/function maxLengthCheck(object){if(object.value.length > object.maxLength)
object.value = object.value.slice(0, object.maxLength)}</script>
Pembaruan: Anda mungkin juga ingin mencegah karakter non-numerik dimasukkan, karena object.lengthakan menjadi string kosong untuk input angka, dan karenanya panjangnya akan menjadi 0. Dengan demikian maxLengthCheckfungsi tidak akan berfungsi.
Ini adalah solusi yang baik, tetapi saya menemukan bahwa object.value.length mengembalikan 0 jika ada nilai non-numerik yang dimasukkan.
Andrew
1
@AndrewSpear Itu karena object.value akan menjadi string kosong jika Anda memasukkan nilai-nilai non-numerik dalam input dengan jenis set 'angka'. Lihat dokumentasi. Baca juga pembaruan saya untuk memperbaiki masalah ini.
David Refoua
Ini masih rusak jika Anda memasukkan lebih dari satu titik desimal, seperti 111..1111. Jangan gunakan kode ini untuk keamanan, karena kode berbahaya mungkin masih bisa dilewati.
PieBie
@PieBie Bung, kode ini untuk 3+ tahun yang lalu. Gunakan jQuery sebagai gantinya.
David Refoua
1
ya, saya tahu itu, tetapi pemula mungkin masih tinggal salin-tempel.
PieBie
26
itu sangat sederhana, dengan beberapa javascript Anda dapat mensimulasikan maxlength, periksa:
masalah dengan keydownadalah bahwa Anda tidak dapat menggunakan backspace pada karakter maksimal. masalah dengan keypressadalah bahwa Anda dapat menyalin + menempel di luar karakter maks.
Stavm
23
Atau jika nilai maks Anda misalnya 99 dan minimum 0, Anda dapat menambahkan ini ke elemen input (nilai Anda akan ditulis ulang oleh nilai maks Anda, dll.)
Atribut pola tidak didukung di IE9 dan versi sebelumnya, dan memiliki dukungan parsial di Safari: caniuse.com/#feat=input-pattern
diazdeteran
Ya, terima kasih telah menunjuk, tapi kami menjatuhkan dukungan IE9 (memotong mustard darinya), dan saya lebih suka menggunakan metode JS. Tergantung pada proyek.
Chris Panayotoff
2
Seorang pengguna tidak dicegah memasukkan karakter non-numerik dengan ini. Mereka dapat memasukkan 2 karakter apa saja. Satu- patternsatunya penyebab penyorotan validasi.
brt
diuji pada Android 9 (Nokia 8) tetapi saya mendapatkan keyboard reguler :( ada ide?
oriadam
14
//For Angular I have attached following snippet.
<divng-app=""><form>
Enter number: <inputtype="number"ng-model="number"onKeyPress="if(this.value.length==7)returnfalse;"min="0"></form><h1>You entered: {{number}}</h1></div>
Jika Anda menggunakan acara "onkeypress" maka Anda tidak akan mendapatkan batasan pengguna saat mengembangkan (unit test it). Dan jika Anda memiliki persyaratan yang tidak mengizinkan pengguna untuk masuk setelah batas tertentu, lihat kode ini dan coba sekali.
Masalah yang saya lihat di sini adalah: 1. ganti dengan memilih teks dan jenis tidak bekerja jika input telah mencapai 7 angka 2. meningkatkan input dengan 1 ketika hit "boarder" hits berfungsi -> 9999999 dan klik atas tombol. Breaks the limitation
Edub
Saya mencoba dengan javascript versi sederhana. Jika mau, Anda dapat melihat menggunakan cuplikan kode Jalankan. Karena itu saya tidak menemukan batasan.
Prasad Shinde
1
Juga tidak menemukan batasan. Itu berhenti di 7 digit. Saya menggunakan solusi ini untuk kode saya.
Claudio
Ada batasan. Ketika Anda mencapai batas, pilih semua dan ingin menggantinya, itu tidak berfungsi. Pengganti hanya berfungsi untuk saya ketika saya menimpa nilai dengan yang pertama sebelum saya kembali salah.
Insomnia88
@ Insomnia88, @ edub bagaimana jika kita menulis fungsi dan memeriksa kondisi yang diperlukan ...
Prasad Shinde
12
Pilihan lain adalah dengan hanya menambahkan pendengar untuk apa pun dengan atribut maxlength dan menambahkan nilai slice untuk itu. Dengan asumsi pengguna tidak ingin menggunakan fungsi di dalam setiap peristiwa yang terkait dengan input. Berikut cuplikan kode. Abaikan kode CSS dan HTML, JavaScript yang penting.
// Reusable Function to Enforce MaxLengthfunction enforce_maxlength(event){var t = event.target;if(t.hasAttribute('maxlength')){
t.value = t.value.slice(0, t.getAttribute('maxlength'));}}// Global Listener for anything with an maxlength attribute.// I put the listener on the body, put it on whatever.
document.body.addEventListener('input', enforce_maxlength);
<labelfor="test_input">Text Input</label><inputid="test_input"type="text"maxlength="5"/><span>set to 5 maxlength</span><br><labelfor="test_input">Number Input</label><inputid="test_input"type="number"min="0"max="99"maxlength="2"/><span>set to 2 maxlength, min 0 and max 99</span>
Panjang max tidak akan bekerja dengan <input type="number"cara terbaik yang saya tahu adalah menggunakan oninputevent untuk membatasi maxlength. Silakan lihat kode di bawah ini untuk implementasi sederhana.
<inputname="somename"oninput="javascript: if (this.value.length > this.maxLength) this.value = this.value.slice(0, this.maxLength);"
type = "number"
maxlength = "6"
/>
Seperti yang dinyatakan oleh yang lain, min / max tidak sama dengan maxlength karena orang masih bisa memasukkan float yang akan lebih besar dari panjang string maksimum yang Anda inginkan. Untuk benar-benar meniru atribut maxlength, Anda dapat melakukan sesuatu seperti ini dalam keadaan darurat (ini setara dengan maxlength = "16"):
slice akan menghapus karakter tanpa sepengetahuan pengguna akhir saat dimasukkan di antara keduanya. sedangkan max-length akan diblokir.
Pradeep Kumar Prabaharan
@PradeepKumarPrabaharan maxlengthtidak didukung oleh input angka. Dalam contoh saya, value.slice(0,16)tidak akan menendang kecuali nilai input lebih panjang dari 16 karakter.
thdoan
ya maxlength tidak didukung untuk input angka .. kode ini gud tetapi kode ini tidak cocok dengan properti maxlength dengan tepat ..
Pradeep Kumar Prabaharan
@TobiasGaertner type="number"membereskannya :).
thdoan
@ 10basetom ... tergantung pada peramban ... misalnya dalam FF Anda masih dapat memasukkan karakter dan mereka tidak akan berhenti setelah batas - tetapi terkait dengan gagasan nomor jenis ini adalah solusi yang dapat diterima.
Tobias Gaertner
6
Jawaban Maycow Moura adalah awal yang baik. Namun, solusinya berarti bahwa ketika Anda memasukkan digit kedua semua pengeditan bidang berhenti. Jadi, Anda tidak dapat mengubah nilai atau menghapus karakter apa pun.
Kode berikut berhenti di 2, tetapi memungkinkan pengeditan untuk melanjutkan;
$("input[name='minutes']").on('keyup keypress blur change',function(e){//return false if not 0-9if(e.which !=8&& e.which !=0&&(e.which <48|| e.which >57)){returnfalse;}else{//limit length but allow backspace so that you can still delete the numbers.if( $(this).val().length >= parseInt($(this).attr('maxlength'))&&(e.which !=8&& e.which !=0)){returnfalse;}}});
Saya tidak tahu apakah kejadiannya sedikit berlebihan tetapi itu menyelesaikan masalah saya.
JSfiddle
tidak bekerja di chrome android. onkeypress memiliki beberapa masalah dengan ini.
Aakash Thakur
3
Seperti halnya type="number", Anda menentukan maxalih - alih maxlengthproperti, yang merupakan jumlah maksimum yang dimungkinkan. Jadi dengan 4 digit, maxseharusnya 9999, 5 digit 99999dan sebagainya.
Juga jika Anda ingin memastikan itu adalah angka positif, Anda dapat mengatur min="0", memastikan angka positif.
itu tidak benar menjawab pertanyaan, tetapi memilih karena telah memecahkan masalah saya :)
TrOnNe
2
Seperti yang saya ketahui, Anda tidak dapat menggunakan salah satu dari onkeydown, onkeypressatau onkeyupacara untuk solusi lengkap termasuk browser seluler. Omong-omong onkeypresssudah usang dan tidak ada lagi di chrome / opera untuk android (lihat: UI Events W3C Working Draft, 04 Agustus 2016 ).
Saya menemukan solusi menggunakan oninputacara saja. Anda mungkin harus melakukan pengecekan angka tambahan seperti yang disyaratkan seperti tanda negatif / positif atau desimal dan ribuan pemisah dan sejenisnya tetapi sebagai permulaan berikut ini sudah cukup:
function checkMaxLength(event){// Prepare to restore the previous value.if(this.oldValue ===undefined){this.oldValue =this.defaultValue;}if(this.value.length >this.maxLength){// Set back to the previous value.this.value = oldVal;}else{// Store the previous value.this.oldValue =this.value;// Make additional checks for +/- or ./, etc.// Also consider to combine 'maxlength'// with 'min' and 'max' to prevent wrong submits.}}
Saya juga akan merekomendasikan untuk menggabungkan maxlengthdengan mindan maxuntuk mencegah pengiriman yang salah sebagaimana dinyatakan di atas beberapa kali.
@tiltdown Sry untuk kesalahan ketik. Memperbaiki jawabannya.
shinobi
1
Saya tahu sudah ada jawaban, tetapi jika Anda ingin input Anda berperilaku persis seperti maxlengthatribut atau sedekat mungkin, gunakan kode berikut:
(function($){
methods ={/*
* addMax will take the applied element and add a javascript behavior
* that will set the max length
*/
addMax:function(){// set variablesvar
maxlAttr = $(this).attr("maxlength"),
maxAttR = $(this).attr("max"),
x =0,
max ="";// If the element has maxlength apply the code.if(typeof maxlAttr !==typeofundefined&& maxlAttr !==false){// create a max equivelantif(typeof maxlAttr !==typeofundefined&& maxlAttr !==false){while(x < maxlAttr){
max +="9";
x++;}
maxAttR = max;}// Permissible Keys that can be used while the input has reached maxlengthvar keys =[8,// backspace9,// tab13,// enter46,// delete37,39,38,40// arrow keys<^>v]// Apply changes to element
$(this).attr("max", maxAttR)//add existing max or new max.keydown(function(event){// restrict key press on length reached unless key being used is in keys array or there is highlighted textif($(this).val().length == maxlAttr && $.inArray(event.which, keys)==-1&& methods.isTextSelected()==false)returnfalse;});;}},/*
* isTextSelected returns true if there is a selection on the page.
* This is so that if the user selects text and then presses a number
* it will behave as normal by replacing the selection with the value
* of the key pressed.
*/
isTextSelected:function(){// set text variable
text ="";if(window.getSelection){
text = window.getSelection().toString();}elseif(document.selection && document.selection.type !="Control"){
text = document.selection.createRange().text;}return(text.length >0);}};
$.maxlengthNumber =function(){// Get all number inputs that have maxlength
methods.addMax.call($("input[type=number]"));}})($)// Apply it:
$.maxlengthNumber();
@Phill_t mungkin Anda bisa mencerahkan saya? Saya menggunakan kode Anda dan itu bekerja dengan baik dalam prinsipnya TETAPI "$ (ini) .attr (" maxlength ")" selalu memberikan 2. DAN mengapa lebih baik menggunakan "$ (ini) .attr (" maxlength ")" apakah itu berfungsi, bukan hanya "this.maxlength" yang saya uji dan bekerja seperti yang diharapkan dan lebih pendek dan juga lebih jelas untuk membaca? Apakah saya melewatkan sesuatu?
markus s
Apa maksudmu "menghasilkan 2"?
Philll_t
Phill_t permintaan maafku "this.maxLength" hanya berfungsi dalam lingkup fungsi keydown. Dalam fungsi "addMax" "this" adalah dokumen daripada elemen yang diharapkan dan karenanya memiliki nilai atribut yang berbeda. Bagaimana cara saya mendapatkan akses ke input nomor? Apakah kode di atas benar-benar bekerja di pihak Anda? Saya menguji dengan Chrome / Opera / Vivaldi, Firefox, Edge, IE dan Safari dan memiliki hasil yang sama untuk setiap browser. Oke, di Edge maxlegth = "1" dan maxlength = "2" di mana memang berfungsi tetapi "$ (ini) .attr (" maxlength ")" tidak bertambah lagi untuk angka yang lebih tinggi !!? @ semua orang: Ada saran?
markus s
Seperti yang saya katakan selalu ada dua karena dipanggil pada dokumen dan bukan pada elemen yang dimaksud ketika saya tahu ketika saya sedang debugging. Ngomong-ngomong Anda mungkin juga ingin melihat solusi saya yang saya tahu setelah mempelajari milik Anda: stackoverflow.com/a/41871960/1312012
markus s
0
Atribut yang lebih relevan untuk digunakan adalah mindan max.
Dengan sedikit javascript, Anda dapat mencari semua input datetime-lokal, cari jika tahun pengguna mencoba untuk memasukkan, lebih besar dari 100 tahun di masa depan:
$('input[type=datetime-local]').each(function( index ){
$(this).change(function(){var today =newDate();var date =newDate(this.value);var yearFuture =newDate();
yearFuture.setFullYear(yearFuture.getFullYear()+100);if(date.getFullYear()> yearFuture.getFullYear()){this.value= today.getFullYear()+this.value.slice(4);}})});
Jawaban:
Dan Anda dapat menambahkan
max
atribut yang akan menentukan angka setinggi mungkin yang dapat Anda masukkanjika Anda menambahkan a
max
danmin
nilai, Anda dapat menentukan rentang nilai yang diizinkan:Di atas masih tidak akan menghentikan pengguna dari memasukkan nilai secara manual di luar rentang yang ditentukan. Sebagai gantinya, ia akan ditampilkan sembulan yang memberitahukannya untuk memasukkan nilai dalam rentang ini setelah mengirimkan formulir seperti yang ditunjukkan dalam tangkapan layar ini:
sumber
Anda dapat menentukan atribut
min
danmax
, yang akan memungkinkan input hanya dalam rentang tertentu.Ini hanya berfungsi untuk tombol kontrol pemintal. Meskipun pengguna mungkin dapat mengetikkan angka yang lebih besar dari yang diizinkan
max
, formulir tidak akan mengirimkan.Cuplikan layar diambil dari Chrome 15
Anda dapat menggunakan
oninput
acara HTML5 dalam JavaScript untuk membatasi jumlah karakter:sumber
maxlength
.............Jika Anda mencari solusi Web Seluler di mana Anda ingin pengguna Anda melihat papan nomor daripada keyboard teks lengkap. Gunakan type = "tel". Ini akan bekerja dengan maxlength yang menyelamatkan Anda dari membuat javascript tambahan.
Maks dan Min masih akan memungkinkan pengguna untuk Mengetik angka lebih dari maks dan min, yang tidak optimal.
sumber
Anda dapat menggabungkan semua ini seperti ini:
Pembaruan:
Anda mungkin juga ingin mencegah karakter non-numerik dimasukkan, karena
object.length
akan menjadi string kosong untuk input angka, dan karenanya panjangnya akan menjadi0
. Dengan demikianmaxLengthCheck
fungsi tidak akan berfungsi.Solusi:
Lihat ini atau ini sebagai contoh.
Demo - Lihat versi lengkap kode di sini:
http://jsfiddle.net/DRSDavidSoft/zb4ft1qq/1/
Pembaruan 2: Berikut kode pembaruan: https://jsfiddle.net/DRSDavidSoft/zb4ft1qq/2/
Pembaruan 3: Harap dicatat bahwa memungkinkan lebih dari satu titik desimal dimasukkan dapat mengacaukan nilai angka.
sumber
itu sangat sederhana, dengan beberapa javascript Anda dapat mensimulasikan
maxlength
, periksa:sumber
keydown
adalah bahwa Anda tidak dapat menggunakan backspace pada karakter maksimal. masalah dengankeypress
adalah bahwa Anda dapat menyalin + menempel di luar karakter maks.Atau jika nilai maks Anda misalnya 99 dan minimum 0, Anda dapat menambahkan ini ke elemen input (nilai Anda akan ditulis ulang oleh nilai maks Anda, dll.)
Kemudian (jika Anda mau), Anda dapat memeriksa apakah input benar-benar angka
sumber
onKeyUp="if(this.value>this.max)this.value=this.max;if(this.value<this.min)this.value=this.min;"
Anda dapat menetapkannya sebagai teks, tetapi menambahkan pettern, yang hanya cocok dengan angka:
Ini berfungsi sempurna dan juga pada ponsel (diuji pada iOS 8 dan Android) muncul nomor keyboard.
sumber
pattern
satunya penyebab penyorotan validasi.Jika Anda menggunakan acara "onkeypress" maka Anda tidak akan mendapatkan batasan pengguna saat mengembangkan (unit test it). Dan jika Anda memiliki persyaratan yang tidak mengizinkan pengguna untuk masuk setelah batas tertentu, lihat kode ini dan coba sekali.
sumber
Pilihan lain adalah dengan hanya menambahkan pendengar untuk apa pun dengan atribut maxlength dan menambahkan nilai slice untuk itu. Dengan asumsi pengguna tidak ingin menggunakan fungsi di dalam setiap peristiwa yang terkait dengan input. Berikut cuplikan kode. Abaikan kode CSS dan HTML, JavaScript yang penting.
sumber
Panjang max tidak akan bekerja dengan
<input type="number"
cara terbaik yang saya tahu adalah menggunakanoninput
event untuk membatasi maxlength. Silakan lihat kode di bawah ini untuk implementasi sederhana.sumber
Katakanlah Anda ingin nilai maksimum yang dibolehkan adalah 1000 - baik diketik atau dengan pemintal.
Anda membatasi nilai pemintal menggunakan:
type="number" min="0" max="1000"
dan batasi apa yang diketik oleh keyboard dengan javascript:
onkeyup="if(parseInt(this.value)>1000){ this.value =1000; return false; }
"sumber
Seperti yang dinyatakan oleh yang lain, min / max tidak sama dengan maxlength karena orang masih bisa memasukkan float yang akan lebih besar dari panjang string maksimum yang Anda inginkan. Untuk benar-benar meniru atribut maxlength, Anda dapat melakukan sesuatu seperti ini dalam keadaan darurat (ini setara dengan maxlength = "16"):
sumber
maxlength
tidak didukung oleh input angka. Dalam contoh saya,value.slice(0,16)
tidak akan menendang kecuali nilai input lebih panjang dari 16 karakter.type="number"
membereskannya :).Jawaban Maycow Moura adalah awal yang baik. Namun, solusinya berarti bahwa ketika Anda memasukkan digit kedua semua pengeditan bidang berhenti. Jadi, Anda tidak dapat mengubah nilai atau menghapus karakter apa pun.
Kode berikut berhenti di 2, tetapi memungkinkan pengeditan untuk melanjutkan;
sumber
Saya punya masalah ini sebelumnya dan saya menyelesaikannya menggunakan kombinasi tipe nomor html5 dan jQuery.
naskah:
Saya tidak tahu apakah kejadiannya sedikit berlebihan tetapi itu menyelesaikan masalah saya. JSfiddle
sumber
Input HTML
jQuery
sumber
cara sederhana untuk mengatur panjang maksimum untuk input angka adalah:
sumber
Seperti halnya
type="number"
, Anda menentukanmax
alih - alihmaxlength
properti, yang merupakan jumlah maksimum yang dimungkinkan. Jadi dengan 4 digit,max
seharusnya9999
, 5 digit99999
dan sebagainya.Juga jika Anda ingin memastikan itu adalah angka positif, Anda dapat mengatur
min="0"
, memastikan angka positif.sumber
Ugh. Ini seperti seseorang menyerah setengah jalan melalui penerapannya dan berpikir tidak ada yang akan memperhatikan.
Untuk alasan apa pun, jawaban di atas tidak menggunakan atribut
min
danmax
. JQuery ini menyelesaikannya:Mungkin juga akan berfungsi sebagai fungsi bernama "oninput" tanpa jQuery jika salah satu dari tipe "jQuery-is-the-devil" Anda.
sumber
Seperti yang saya ketahui, Anda tidak dapat menggunakan salah satu dari
onkeydown
,onkeypress
atauonkeyup
acara untuk solusi lengkap termasuk browser seluler. Omong-omongonkeypress
sudah usang dan tidak ada lagi di chrome / opera untuk android (lihat: UI Events W3C Working Draft, 04 Agustus 2016 ).Saya menemukan solusi menggunakan
oninput
acara saja. Anda mungkin harus melakukan pengecekan angka tambahan seperti yang disyaratkan seperti tanda negatif / positif atau desimal dan ribuan pemisah dan sejenisnya tetapi sebagai permulaan berikut ini sudah cukup:Saya juga akan merekomendasikan untuk menggabungkan
maxlength
denganmin
danmax
untuk mencegah pengiriman yang salah sebagaimana dinyatakan di atas beberapa kali.sumber
atau jika Anda ingin dapat memasukkan apa pun
sumber
Anda dapat mencoba ini juga untuk input numerik dengan batasan panjang
sumber
Saya tahu sudah ada jawaban, tetapi jika Anda ingin input Anda berperilaku persis seperti
maxlength
atribut atau sedekat mungkin, gunakan kode berikut:sumber
Atribut yang lebih relevan untuk digunakan adalah
min
danmax
.sumber
Ini mungkin membantu seseorang.
Dengan sedikit javascript, Anda dapat mencari semua input datetime-lokal, cari jika tahun pengguna mencoba untuk memasukkan, lebih besar dari 100 tahun di masa depan:
sumber