Apakah ada cara cepat untuk mengatur input teks HTML ( <input type=text />
) untuk hanya memungkinkan penekanan tombol numerik (plus '.')?
javascript
jquery
html
Julius A
sumber
sumber
<input type="text" onkeypress='return event.charCode >= 48 && event.charCode <= 57'></input>
Jawaban:
Catatan: Ini adalah jawaban yang diperbarui. Komentar di bawah mengacu pada versi lama yang dipusingkan dengan kode kunci.
JavaScript
Cobalah sendiri di JSFiddle .
Anda dapat memfilter nilai input teks
<input>
dengansetInputFilter
fungsi berikut (mendukung Salin + Tempel, Seret + Jatuhkan, pintasan keyboard, operasi menu konteks, tombol yang tidak dapat diketikkan, posisi caret, tata letak keyboard yang berbeda, dan semua browser sejak IE 9 ) :Anda sekarang dapat menggunakan
setInputFilter
fungsi untuk menginstal filter input:Lihat demo JSFiddle untuk lebih banyak contoh filter masukan. Perhatikan juga bahwa Anda masih harus melakukan validasi sisi server!
TypeScript
Berikut adalah versi TypeScript ini.
jQuery
Ada juga versi jQuery ini. Lihat jawaban ini .
HTML 5
HTML 5 memiliki solusi asli dengan
<input type="number">
(lihat spesifikasi ), tetapi perhatikan bahwa dukungan browser bervariasi:step
,min
danmax
atribut.e
danE
masuk ke bidang. Lihat juga pertanyaan ini .Cobalah sendiri di w3schools.com .
sumber
(e.keyCode == 65 && (e.ctrlKey === true || e.metaKey === true))
Gunakan DOM ini
Dan skrip ini
sumber
Saya telah mencari panjang dan keras untuk jawaban yang bagus untuk ini, dan kami sangat membutuhkan
<input type="number"
, tetapi singkatnya, 2 ini adalah cara paling ringkas yang bisa saya buat:Jika Anda tidak suka karakter yang tidak diterima ditampilkan selama sepersekian detik sebelum dihapus, metode di bawah ini adalah solusi saya. Perhatikan berbagai kondisi tambahan, ini untuk menghindari penonaktifan semua jenis navigasi dan hotkey. Jika ada yang tahu bagaimana memadatkan ini, beri tahu kami!
sumber
/[^\d+]/
dan berfungsi dengan menahan/[^\d]+/
. Solusi yang bagus. Juga @ user235859.
juga. Anda harus benar-benar membuatnya/[^0-9.]/g
Berikut ini adalah yang sederhana yang memungkinkan tepat satu desimal, tetapi tidak lebih:
sumber
Dan satu contoh lagi, yang sangat bagus untuk saya:
Juga lampirkan ke acara penekanan tombol
Dan HTML:
Berikut adalah contoh jsFiddle
sumber
HTML5 memiliki
<input type=number>
, yang terdengar tepat untuk Anda. Saat ini, hanya Opera yang mendukungnya secara asli, tetapi ada proyek yang memiliki implementasi JavaScript.sumber
type=number
adalah yang tidak didukung oleh IE9type=number
adalah membiarkane
char karena dianggape+10
sebagai angka. Masalah kedua adalah bahwa Anda tidak dapat membatasi jumlah karakter dalam input.Sebagian besar jawaban di sini semuanya memiliki kelemahan dalam menggunakan peristiwa-peristiwa penting .
Banyak jawaban akan membatasi kemampuan Anda untuk melakukan pemilihan teks dengan makro keyboard, salin + tempel dan perilaku yang tidak diinginkan, yang lain tampaknya bergantung pada plugin jQuery tertentu, yang membunuh lalat dengan senapan mesin.
Solusi sederhana ini tampaknya bekerja paling baik untuk saya lintas platform, terlepas dari mekanisme input (keystroke, copy + paste, klik kanan copy + paste, speech-to-text dll.). Semua makro keyboard pemilihan teks akan tetap berfungsi, dan bahkan akan membatasi kemampuannya untuk menetapkan nilai non-numerik dengan skrip.
sumber
replace(/[^\d]+/g,'')
Ganti semua non-digit dengan string kosong. Pengubah "i" (tidak sensitif huruf) tidak diperlukan./[^\d,.]+/
Saya memilih untuk menggunakan kombinasi dari dua jawaban yang disebutkan di sini yaitu
<input type="number" />
dan
<input type="text" onkeypress="return isNumberKey(event);">
sumber
return !(charCode > 31 && (charCode < 48 || charCode > 57));
HTML5 mendukung regex, sehingga Anda dapat menggunakan ini:
Peringatan: Beberapa browser belum mendukung ini.
sumber
<input type=number>
.+
artinya dalam atribut pola?JavaScript
tambahan Anda bisa menambahkan koma, titik, dan minus (, .-)
HTML
sumber
Sangat sederhana....
// Dalam fungsi JavaScript (dapat menggunakan HTML atau PHP).
Di input formulir Anda:
Dengan input maks. (Ini di atas memungkinkan untuk nomor 12 digit)
sumber
var charCode = (evt.which) ? evt.which : evt.keyCode;
2 solusi:
Gunakan validator formulir (misalnya dengan plugin validasi jQuery )
Lakukan pemeriksaan selama peristiwa onblur (yaitu ketika pengguna meninggalkan bidang) dari kolom input, dengan ekspresi reguler:
sumber
var regExpr = /^\d+(\.\d*)?$/;
.123
(bukan0.123
) misalnya?var regExpr = /^\d+(\.\d*)?$|^\.\d+$/;
.Pendekatan yang lebih aman adalah memeriksa nilai input, daripada membajak penekanan tombol dan mencoba memfilter kode kunci.
Dengan cara ini pengguna bebas menggunakan panah keyboard, tombol pengubah, backspace, menghapus, menggunakan keyboar yang tidak standar, menggunakan mouse untuk menempelkan, menggunakan teks seret dan jatuhkan, bahkan menggunakan input aksesibilitas.
Skrip di bawah ini memungkinkan angka positif dan negatif
EDIT: Saya menghapus jawaban lama saya karena saya pikir itu sudah ketinggalan zaman sekarang.
sumber
Anda dapat menggunakan pola untuk ini:
Di sini Anda dapat melihat kiat antarmuka situs web seluler yang lengkap .
sumber
Silakan temukan solusi yang disebutkan di bawah ini. Dalam pengguna ini dapat bisa masuk hanya
numeric
nilai, juga pengguna tidak dapat dapatcopy
,paste
,drag
dandrop
di masukan.Beri tahu saya jika itu tidak berhasil.
sumber
Jika Anda ingin menyarankan ke perangkat (mungkin ponsel) antara alfa atau numerik yang dapat Anda gunakan
<input type="number">
.sumber
Satu lagi contoh di mana Anda hanya dapat menambahkan angka di bidang input, tidak bisa huruf
sumber
Implementasi singkat dan manis menggunakan jQuery dan replace () alih-alih melihat event.keyCode atau event.yang:
Hanya efek samping kecil bahwa huruf yang diketik muncul sebentar dan CTRL / CMD + A tampaknya berperilaku agak aneh.
sumber
input type="number"
adalah atribut HTML5.Dalam kasus lain, ini akan membantu Anda:
sumber
var charCode = (evt.which) ? evt.which : evt.keyCode;
Kode JavaScript:
Kode HTML:
berfungsi dengan baik karena kode kunci backspace adalah 8 dan ekspresi regex tidak membiarkannya, jadi ini adalah cara mudah untuk mem-bypass bug :)
sumber
Cara mudah untuk mengatasi masalah ini adalah menerapkan fungsi jQuery untuk memvalidasi dengan regex karakter yang diketik dalam kotak teks misalnya:
Kode html Anda:
Dan fungsi js menggunakan jQuery
sumber
Hanya varian lain yang menggunakan jQuery
sumber
cukup gunakan type = "number" sekarang atribut ini mendukung di sebagian besar browser
sumber
--1
(2 karakter minus sebelum 1).Anda juga dapat membandingkan nilai input (yang diperlakukan sebagai string secara default) dengan yang dipaksa sebagai numerik, seperti:
Namun, Anda harus mengikatnya ke acara seperti keyup dll.
sumber
sumber
Saya melihat beberapa jawaban bagus namun saya suka mereka sekecil dan sesederhana mungkin, jadi mungkin seseorang akan mendapat manfaat dari itu. Saya akan menggunakan javascript
Number()
danisNaN
fungsionalitas seperti ini:Semoga ini membantu.
sumber
Gunakan DOM ini:
Dan skrip ini:
... ATAU skrip ini, tanpa indexOf, menggunakan dua
for
...Saya menggunakan atribut onkeydown daripada onkeypress, karena atribut onkeydown diperiksa sebelum atribut onkeypress. Masalahnya ada di browser Google Chrome.
Dengan atribut "onkeypress", TAB akan menjadi tidak terkendali dengan "preventDefault" di google chrome, namun, dengan atribut "onkeydown", TAB menjadi terkendali!
Kode ASCII untuk TAB => 9
Skrip pertama memiliki lebih sedikit kode daripada yang kedua, namun, array karakter ASCII harus memiliki semua kunci.
Script kedua jauh lebih besar dari yang pertama, tetapi array tidak membutuhkan semua kunci. Digit pertama di setiap posisi array adalah berapa kali setiap posisi akan dibaca. Untuk setiap bacaan, akan bertambah 1 ke yang berikutnya. Sebagai contoh:
NCount = 0
48 + NCount = 48
NCount + +
48 + NCount = 49
NCount + +
...
48 + NCount = 57
Dalam hal kunci numerik hanya 10 (0 - 9), tetapi jika jumlahnya 1 juta tidak masuk akal untuk membuat array dengan semua kunci ini.
Kode ASCII:
sumber
Ini adalah fungsi yang ditingkatkan:
sumber
Cara terbaik (memungkinkan SEMUA jenis angka - nyata negatif, positif nyata, negatif iinteger, bilangan bulat positif) adalah:
sumber
Ini adalah versi lanjutan dari solusi geowa4 . Dukungan
min
danmax
atribut. Jika angkanya di luar kisaran, nilai sebelumnya akan ditampilkan.Anda bisa mengujinya di sini.
Pemakaian:
<input type=text class='number' maxlength=3 min=1 max=500>
Jika inputnya dinamis, gunakan ini:
sumber