Bagaimana mengizinkan hanya angka (0-9) dalam kotak masukan HTML menggunakan jQuery?

901

Saya membuat halaman web di mana saya memiliki bidang teks input di mana saya ingin hanya mengizinkan karakter numerik seperti (0,1,2,3,4,5 ... 9) 0-9.

Bagaimana saya bisa melakukan ini menggunakan jQuery?

Prashant
sumber
73
Ingatlah bahwa Anda tidak dapat mengandalkan validasi sisi klien - Anda juga perlu memvalidasi di server jika pengguna telah menonaktifkan JavaScript, atau tidak menggunakan browser yang kompatibel dengan JavaScript.
cjk
45
sudahkah Anda mempertimbangkan html5? <input type = "number" />. dengan atribut min dan maks, Anda dapat membatasi input juga
ZX12R
5
Saya pikir Anda harus memeriksa nilai input pada acara keyup dan tidak memeriksa kode kunci, karena jauh lebih dapat diandalkan di seluruh perbedaan dalam keyboard dan apa yang tidak.
Richard
13
Saya setuju sepenuhnya dengan Richard: jangan tidak menggunakan keycodes. Jawaban yang diterima tidak berfungsi pada keyboard Prancis, misalnya, karena Anda harus menekan "Shift" untuk mengetikkan angka pada keyboard tersebut. Kode kunci terlalu berisiko, IMHO.
MiniQuark
3
@ ZX12R Tidak berfungsi di semua versi IE saat ini. Semuanya baik dan bagus untuk menggunakan kode terbaru pada barang-barang Anda sendiri agar tetap segar, tetapi ini sebenarnya bukan pilihan untuk hampir semua proyek profesional. caniuse.com/#feat=input-number
Eric

Jawaban:

1260

Catatan: Ini adalah jawaban yang diperbarui. Komentar di bawah mengacu pada versi lama yang dipusingkan dengan kode kunci.

jQuery

Cobalah sendiri di JSFiddle .

Tidak ada implementasi jQuery asli untuk ini, tetapi Anda dapat memfilter nilai input teks <input>dengan inputFilterplugin berikut (mendukung Salin + Tempel, Seret + Jatuhkan, pintasan keyboard, operasi menu konteks, kunci non-typeable, posisi caret, berbeda tata letak keyboard, dan semua browser sejak IE 9 ):

// Restricts input for the set of matched elements to the given inputFilter function.
(function($) {
  $.fn.inputFilter = function(inputFilter) {
    return this.on("input keydown keyup mousedown mouseup select contextmenu drop", function() {
      if (inputFilter(this.value)) {
        this.oldValue = this.value;
        this.oldSelectionStart = this.selectionStart;
        this.oldSelectionEnd = this.selectionEnd;
      } else if (this.hasOwnProperty("oldValue")) {
        this.value = this.oldValue;
        this.setSelectionRange(this.oldSelectionStart, this.oldSelectionEnd);
      } else {
        this.value = "";
      }
    });
  };
}(jQuery));

Anda sekarang dapat menggunakan inputFilterplugin untuk menginstal filter input:

$(document).ready(function() {
  $("#myTextBox").inputFilter(function(value) {
    return /^\d*$/.test(value);    // Allow digits only, using a RegExp
  });
});

Lihat demo JSFiddle untuk lebih banyak contoh filter masukan. Perhatikan juga bahwa Anda masih harus melakukan validasi sisi server!

JavaScript Murni (tanpa jQuery)

jQuery sebenarnya tidak diperlukan untuk ini, Anda dapat melakukan hal yang sama dengan JavaScript murni juga. Lihat jawaban ini .

HTML 5

HTML 5 memiliki solusi asli dengan <input type="number">(lihat spesifikasi ), tetapi perhatikan bahwa dukungan browser bervariasi:

  • Sebagian besar browser hanya akan memvalidasi input saat mengirimkan formulir, dan bukan saat mengetik.
  • Sebagian besar peramban seluler tidak mendukung step, mindan maxatribut.
  • Chrome (versi 71.0.3578.98) masih memungkinkan pengguna untuk memasukkan karakter edan Emasuk ke bidang. Lihat juga pertanyaan ini .
  • Firefox (versi 64.0) dan Edge (EdgeHTML versi 17.17134) masih memungkinkan pengguna untuk memasukkan teks apa pun ke dalam bidang.

Cobalah sendiri di w3schools.com .

emkey08
sumber
45
Terima kasih! event.keyCode == 46 || event.keyCode == 8 || event.keyCode == 190 jika Anda ingin desimal
Michael L Watson
9
Tambahkan keyCodes 37 dan 39 untuk memungkinkan navigasi panah kiri dan kanan di kotak txt misalnya: if (event.keyCode == 46 || event.keyCode == 8 || event.keyCode == 37 || event.keyCode == 39)
Anthony Queen
22
ooo, baru saja mengambil masalah untuk ini dari penguji kami. Anda harus mencegah pengguna menahan shift dan menekan tombol angka, jika tidak input akan memungkinkan! @ # $% ^ & * ()
Allen Rice
6
Mengonfirmasi bug shift +. Juga, ALT + angka pad memungkinkan hampir semua hal (yaitu Alt + 321 = A, Alt + 322 = B, dll ...). Lain halnya dengan validasi sisi server.
Anthony Queen
140
Saya benar-benar tidak setuju dengan jawaban ini: itu benar-benar terlalu berisiko bermain dengan kode kunci, karena Anda tidak dapat memastikan apa itu tata letak keyboard. Misalnya, pada keyboard Prancis, pengguna harus menekan shift untuk mengetikkan angka. Jadi kode ini tidak akan berfungsi sama sekali. Jadi tolong pergi untuk validasi daripada hack kode kunci ini.
MiniQuark
182

Berikut adalah fungsi yang saya gunakan:

// Numeric only control handler
jQuery.fn.ForceNumericOnly =
function()
{
    return this.each(function()
    {
        $(this).keydown(function(e)
        {
            var key = e.charCode || e.keyCode || 0;
            // allow backspace, tab, delete, enter, arrows, numbers and keypad numbers ONLY
            // home, end, period, and numpad decimal
            return (
                key == 8 || 
                key == 9 ||
                key == 13 ||
                key == 46 ||
                key == 110 ||
                key == 190 ||
                (key >= 35 && key <= 40) ||
                (key >= 48 && key <= 57) ||
                (key >= 96 && key <= 105));
        });
    });
};

Anda kemudian dapat melampirkannya di kendali Anda dengan melakukan:

$("#yourTextBoxName").ForceNumericOnly();
Kelsey
sumber
2
saya menemukan ini berguna, tetapi saya menemukan "bug" yang mengganggu. ketika saya menggunakan ini di iMac saya, itu memungkinkan beberapa huruf, seperti a dan e. sepertinya nomor tombol pada pc adalah huruf pada iMac dan keyboard Mac sama dengan angka biasa. ada yang tahu cara membuatnya bekerja di kedua mac dan pc?
Volmar
3
Tombol "Home", "End" tidak berfungsi juga. Ini adalah solusi yang lebih baik yang Peter disarankan: west-wind.com/weblog/posts/2011/Apr/22/...
bman
Kenapa ada return this.each(function() ?
powtac
2
@ Powow - sehingga Anda dapat memanggil .ForceNumericOnly () pada beberapa objek. Misalnya ... $ ("input [type = 'text']"). ForceNumericOnly ()
Oliver Pearmain
1
@ Powowac eachdari return this.each(function()adalah untuk memungkinkan beberapa objek seperti kata HaggleLad, dan returnbagian adalah mengembalikan objek jQuery kembali ke pemanggil, untuk memungkinkan rantai seperti$("input[type='text'").ForceNumericOnly().show()
Jose Rui Santos
149

Di barisan:

<input name="number" onkeyup="if (/\D/g.test(this.value)) this.value = this.value.replace(/\D/g,'')">

Gaya tidak mengganggu (dengan jQuery):

$('input[name="number"]').keyup(function(e)
                                {
  if (/\D/g.test(this.value))
  {
    // Filter non-digits from input value.
    this.value = this.value.replace(/\D/g, '');
  }
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input name="number">

Patrick Fisher
sumber
2
Ini menggerakkan tanda sisir ke ujung bahkan jika pengguna menekan tombol panah kiri.
Phrogz
1
@phrogz, coba ini: onkeyup="if (/\D/g.test(this.value)) this.value = this.value.replace(/\D/g,'')".
Patrick Fisher
Ini berfungsi dengan baik, dan mencegah nomor Shift + tidak seperti yang di atas.
Nick Hartley
5
@ mhenry1384 Itulah perilaku yang diharapkan. Saya menganggapnya sebagai umpan balik yang bagus tetapi jika Anda tidak menyukainya, maka pendekatan kode kunci akan menjadi yang Anda cari.
Patrick Fisher
2
Anda dapat memodifikasi /[^0-9]|^0+(?!$)/guntuk mencegah deretan nol di depan.
Johny Skovdal
105

Anda bisa menggunakan ekspresi reguler JavaScript sederhana untuk menguji karakter numerik murni:

/^[0-9]+$/.test(input);

Ini mengembalikan true jika inputnya numerik atau salah jika tidak.

atau untuk kode kunci acara, gunakan sederhana di bawah ini:

     // Allow: backspace, delete, tab, escape, enter, ctrl+A and .
    if ($.inArray(e.keyCode, [46, 8, 9, 27, 13, 110, 190]) !== -1 ||
         // Allow: Ctrl+A
        (e.keyCode == 65 && e.ctrlKey === true) || 
         // Allow: home, end, left, right
        (e.keyCode >= 35 && e.keyCode <= 39)) {
             // let it happen, don't do anything
             return;
    }

    var charValue = String.fromCharCode(e.keyCode)
        , valid = /^[0-9]+$/.test(charValue);

    if (!valid) {
        e.preventDefault();
    }
Umang
sumber
11
Lihat jawaban saya untuk implementasi dari pendekatan ini.
Patrick Fisher
bukankah akan memakan waktu prosesor lebih sedikit untuk memeriksa penekanan tombol numerik daripada memeriksa ekspresi reguler?
andrsnn
87

Anda dapat menggunakan pada acara masukan seperti ini:

$(document).on("input", ".numeric", function() {
    this.value = this.value.replace(/\D/g,'');
});

Tapi, apa hak istimewa kode ini?

  • Ini berfungsi di browser seluler (keydown dan keyCode bermasalah).
  • Ini berfungsi pada konten yang dihasilkan AJAX juga, karena Kami menggunakan "pada".
  • Performa yang lebih baik daripada keydown, misalnya pada acara tempel.
Hamid Afarinesh Far
sumber
6
Saya merasa ini adalah solusi yang jauh lebih kuat (dan lebih sederhana) daripada jawaban yang diterima.
Jeremy Harris
Lebih sederhana lagi jika menggunakan ganti (/ \ D / g, '')
Alfergon
hai, bagaimana saya bisa memastikan nilai numerik dengan decimalantara 0.0sampai 24.0saya tidak dapat membiarkannya masuk.
transformer
Saya sarankan menggunakanthis.value = Number(this.value.replace(/\D/g, ''));
HasanG
Jawaban yang bagus, memungkinkan untuk dengan mudah beralih apakah input numerik atau tidak dengan beralih kelas
raklos
55

Singkat dan manis - bahkan jika ini tidak akan pernah menemukan banyak perhatian setelah 30+ jawaban;)

  $('#number_only').bind('keyup paste', function(){
        this.value = this.value.replace(/[^0-9]/g, '');
  });
Singkirkan Iculous
sumber
5
Saya akan mengganti keyup dengan input, jika tidak Anda bisa mempertahankan huruf yang ditekan lalu klik untuk mengeluarkan fokus dari kotak teks dan membiarkan teks apa adanya. masukan memastikan bahwa ini tidak dapat terjadi
WizLiz
Terima kasih untuk regex - tetapi ini adalah event handler yang lebih baik: $ ('# number_only'). On ('input propertychange', function () {this.value = this.value.replace (/ [^ 0-9] / g, '');});
BradM
3
FYI - Pertanyaannya tidak menanyakannya, tetapi ini tidak memungkinkan untuk desimal (mis. 12.75). Mengikat "input" daripada "keyup" membuat UX lebih halus daripada melihat karakter mereka selama sepersekian detik, kemudian menghapusnya.
Paul
44

Gunakan fungsi JavaScript isNaN ,

if (isNaN($('#inputid').val()))

if (isNaN (document.getElementById ('inputid'). val ()))

if (isNaN(document.getElementById('inputid').value))

Pembaruan: Dan di sini artikel yang bagus membicarakannya tetapi menggunakan jQuery: Membatasi Input dalam Kotak Teks HTML ke Nilai Numerik

Amr Elgarhy
sumber
40
Baiklah ... "Tidak menggunakan JQuery" kecuali untuk bagian dari contoh Anda yang menggunakan JQuery ...
GalacticCowboy
document.getElementById('inputid').val()Bung .. itu masih jquery. .val()adalah hal jquery. use.value
mpen
hai, bagaimana saya bisa memastikan nilai numerik dengan decimalantara 0.0sampai 24.0saya tidak dapat membiarkannya masuk.
transformator
28
$(document).ready(function() {
    $("#txtboxToFilter").keydown(function(event) {
        // Allow only backspace and delete
        if ( event.keyCode == 46 || event.keyCode == 8 ) {
            // let it happen, don't do anything
        }
        else {
            // Ensure that it is a number and stop the keypress
            if (event.keyCode < 48 || event.keyCode > 57 ) {
                event.preventDefault(); 
            }   
        }
    });
});

Sumber: http://snipt.net/GerryEng/jquery-making-textfield-only-accept-numeric-values

Ivar
sumber
6
Wow, kosongkan "jika" blok dan angka ajaib keduanya! Saya hanya sedikit muntah di mulut. : D Tapi serius, mengapa harus repot-repot ketika Anda bisa mencocokkan input dengan regex /^[.\d[+$/? Dan apa yang '8' wakili?
Alan Moore
@Lan: Haha, saya tidak tahu - saya menyalin langsung dari sumbernya. Saya akan menulis "if (event.keyCode! = 46 && event.keyCode! = 8)" sebagai gantinya, atau gunakan regex seperti yang Anda katakan. Saya kira 8 mewakili kunci hapus.
Ivar
4
Coba tekan Shift + 8 misalnya - validasi Anda akan membiarkan * masuk
Anton
Ini bagus. Akan jauh lebih baik, Jika menangani tombol Shift + Angka (Karakter khusus seperti! @ # $% ^ ..)
Shyju
27

Saya menggunakan ini di file js umum internal kami. Saya hanya menambahkan kelas ke setiap input yang membutuhkan perilaku ini.

$(".numericOnly").keypress(function (e) {
    if (String.fromCharCode(e.keyCode).match(/[^0-9]/g)) return false;
});
Mijk
sumber
1
Kode yang bagus, elegan dan bermanfaat! Terima kasih. Tetapi Anda harus menambahkan peristiwa keyup dan keydown.
Silvio Delgado
25

Yang lebih sederhana bagi saya adalah

jQuery('.plan_eff').keyup(function () {     
  this.value = this.value.replace(/[^1-9\.]/g,'');
});
Summved Jain
sumber
7
Hanya perlu memastikan Anda menggunakan this.value.replace(/[^0-9\.]/g,'');untuk memasukkan persyaratan OP 0-9
Chalise
24

Kenapa begitu rumit? Anda bahkan tidak perlu jQuery karena ada atribut pola HTML5:

<input type="text" pattern="[0-9]*">

Yang keren adalah ia menampilkan keyboard angka pada perangkat seluler, yang jauh lebih baik daripada menggunakan jQuery.

tamu
sumber
2
Ini harus memiliki lebih banyak suara. Jika ada, Anda juga bisa menambahkan regex mundur untuk browser non-html5 - tetapi validasi data harus ditangani di sisi server.
Markus
sepertinya itu didukung dengan baik oleh sebagian besar browser sekarang, jadi dukungan modernizr tidak begitu penting: caniuse.com/#search=pattern Safari berfungsi dengan sangat baik meskipun terdaftar sebagai sebagian didukung di situs ini. Cobalah!
tamu
@guest Terima kasih banyak untuk ini. Jawaban tercepat dan termudah! Jawaban teratas menurut saya.
BinaryJoe01
19

Anda dapat melakukan hal yang sama dengan menggunakan solusi yang sangat sederhana ini

$("input.numbers").keypress(function(event) {
  return /\d/.test(String.fromCharCode(event.keyCode));
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type="text" class="numbers" name="field_name" />

Saya merujuk tautan ini untuk solusinya. Ini bekerja dengan sempurna !!!

Ganesh Babu
sumber
Mungkin ini lebih baik untuk mengizinkan. angka desimal
Zango
Ini berfungsi sempurna dalam crome. Tapi tidak di Mozilla FireFox
Kirataka
hai, bagaimana saya bisa memastikan nilai numerik dengan decimalantara 0.0sampai 24.0saya tidak dapat membiarkannya masuk.
transformer
tidak berfungsi dengan copy paste
mrid
14

Anda dapat mencoba input nomor HTML5 :

<input type="number" value="0" min="0"> 

Untuk browser yang tidak patuh ada fallback Modernizr dan Webforms2 .

Vitalii Fedorenko
sumber
ini masih memungkinkan koma
apfz
14

Atribut pola dalam HTML5 menentukan ekspresi reguler yang nilai elemennya diperiksa.

  <input  type="text" pattern="[0-9]{1,3}" value="" />

Catatan: Atribut pola berfungsi dengan jenis input berikut: teks, pencarian, url, tel, email, dan kata sandi.

  • [0-9] dapat diganti dengan kondisi ekspresi reguler apa pun.

  • {1,3} itu mewakili minimal 1 dan maksimum 3 digit dapat dimasukkan.

vickisys
sumber
hai, bagaimana saya bisa memastikan nilai numerik dengan decimalantara 0.0sampai 24.0saya tidak dapat membiarkannya masuk.
transformer
1
@ transformer coba ini <input type = "number" pattern = "[0-9] + ([\.,] [0-9] +)?" step = "0,01">
vickisys
11

Sesuatu yang cukup sederhana menggunakan jQuery.validate

$(document).ready(function() {
    $("#formID").validate({
        rules: {
            field_name: {
                numericOnly:true
            }
        }
    });
});

$.validator.addMethod('numericOnly', function (value) {
       return /^[0-9]+$/.test(value);
}, 'Please only enter numeric values (0-9)');
Adrian
sumber
8

function suppressNonNumericInput (event) {

    if( !(event.keyCode == 8                                // backspace
        || event.keyCode == 46                              // delete
        || (event.keyCode >= 35 && event.keyCode <= 40)     // arrow keys/home/end
        || (event.keyCode >= 48 && event.keyCode <= 57)     // numbers on keyboard
        || (event.keyCode >= 96 && event.keyCode <= 105))   // number on keypad
        ) {
            event.preventDefault();     // Prevent character input
    }
}
pengguna261922
sumber
hai, bagaimana saya bisa memastikan nilai numerik dengan decimalantara 0.0sampai 24.0saya tidak dapat membiarkannya masuk.
transformer
8

Saya sampai pada solusi yang sangat bagus dan sederhana yang tidak mencegah pengguna memilih teks atau menyalin paste seperti solusi lainnya. gaya jQuery :)

$("input.inputPhone").keyup(function() {
    var jThis=$(this);
    var notNumber=new RegExp("[^0-9]","g");
    var val=jThis.val();

    //Math before replacing to prevent losing keyboard selection 
    if(val.match(notNumber))
    { jThis.val(val.replace(notNumber,"")); }
}).keyup(); //Trigger on page load to sanitize values set by server
Vincent
sumber
Hei saya menggunakan ini tetapi apa yang saya benar-benar cari adalah untuk memungkinkan dia dot seperti 1,2 atau 3,455 seperti itu
Vivekh
8

Anda dapat menggunakan fungsi JavaScript ini:

function maskInput(e) {
    //check if we have "e" or "window.event" and use them as "event"
        //Firefox doesn't have window.event 
    var event = e || window.event 

    var key_code = event.keyCode;
    var oElement = e ? e.target : window.event.srcElement;
    if (!event.shiftKey && !event.ctrlKey && !event.altKey) {
        if ((key_code > 47 && key_code < 58) ||
            (key_code > 95 && key_code < 106)) {

            if (key_code > 95)
                 key_code -= (95-47);
            oElement.value = oElement.value;
        } else if(key_code == 8) {
            oElement.value = oElement.value;
        } else if(key_code != 9) {
            event.returnValue = false;
        }
    }
}

Dan Anda dapat mengikatnya ke kotak teks Anda seperti ini:

$(document).ready(function() {
    $('#myTextbox').keydown(maskInput);
});

Saya menggunakan di atas dalam produksi, dan berfungsi dengan baik, dan itu adalah lintas-browser. Selain itu, tidak tergantung pada jQuery, jadi Anda dapat mengikatnya ke kotak teks Anda dengan JavaScript sebaris:

<input type="text" name="aNumberField" onkeydown="javascript:maskInput()"/>
karim79
sumber
Ini gagal ketika seseorang menempel teks non numerik di input. Adakah ide bagaimana kita bisa mengatasi ini? Tidak bisa membungkus pikiran saya dengan ini.
Kiran Ruth R
7

Saya pikir itu akan membantu semua orang

  $('input.valid-number').bind('keypress', function(e) { 
return ( e.which!=8 && e.which!=0 && (e.which<48 || e.which>57)) ? false : true ;
  })
Seolah-olah
sumber
Anda lupa tentang input keypad. Ini termasuk:if(event.which!=8 && event.which!=0 && (event.which<48 || event.which>57) && (event.which<96 || event.which>105)) return;
tomvo
6

Saya menulis milik saya berdasarkan postingan @ user261922 di atas, sedikit dimodifikasi sehingga Anda dapat memilih semua, tab dan dapat menangani beberapa bidang "angka saja" pada halaman yang sama.

var prevKey = -1, prevControl = '';
$(document).ready(function () {
    $(".OnlyNumbers").keydown(function (event) {
        if (!(event.keyCode == 8                                // backspace
            || event.keyCode == 9                               // tab
            || event.keyCode == 17                              // ctrl
            || event.keyCode == 46                              // delete
            || (event.keyCode >= 35 && event.keyCode <= 40)     // arrow keys/home/end
            || (event.keyCode >= 48 && event.keyCode <= 57)     // numbers on keyboard
            || (event.keyCode >= 96 && event.keyCode <= 105)    // number on keypad
            || (event.keyCode == 65 && prevKey == 17 && prevControl == event.currentTarget.id))          // ctrl + a, on same control
        ) {
            event.preventDefault();     // Prevent character input
        }
        else {
            prevKey = event.keyCode;
            prevControl = event.currentTarget.id;
        }
    });
});
jamesbar2
sumber
6

Ini adalah solusi cepat yang saya buat beberapa waktu lalu. Anda dapat membaca lebih lanjut tentang itu di artikel saya:

http://ajax911.com/numbers-numeric-field-jquery/

$("#textfield").bind("keyup paste", function(){
    setTimeout(jQuery.proxy(function() {
        this.val(this.val().replace(/[^0-9]/g, ''));
    }, $(this)), 0);
});
Dima
sumber
6

Anda ingin mengizinkan tab:

$("#txtboxToFilter").keydown(function(event) {
    // Allow only backspace and delete
    if ( event.keyCode == 46 || event.keyCode == 8 || event.keyCode == 9 ) {
        // let it happen, don't do anything
    }
    else {
        // Ensure that it is a number and stop the keypress
        if ((event.keyCode < 48 || event.keyCode > 57) && (event.keyCode < 96 || event.keyCode > 105 )) {
            event.preventDefault(); 
        }   
    }
});
ngwanevic
sumber
6

Berikut adalah jawaban yang menggunakan pabrik Widget jQuery UI. Anda dapat menyesuaikan karakter apa yang diizinkan dengan mudah.

$('input').numberOnly({
    valid: "0123456789+-.$,"
});

Itu akan memungkinkan angka, tanda angka dan jumlah dolar.

$.widget('themex.numberOnly', {
    options: {
        valid : "0123456789",
        allow : [46,8,9,27,13,35,39],
        ctrl : [65],
        alt : [],
        extra : []
    },
    _create: function() {
        var self = this;

        self.element.keypress(function(event){
            if(self._codeInArray(event,self.options.allow) || self._codeInArray(event,self.options.extra))
            {
                return;
            }
            if(event.ctrlKey && self._codeInArray(event,self.options.ctrl))
            {
                return;
            }
            if(event.altKey && self._codeInArray(event,self.options.alt))
            {
                return;
            }
            if(!event.shiftKey && !event.altKey && !event.ctrlKey)
            {
                if(self.options.valid.indexOf(String.fromCharCode(event.keyCode)) != -1)
                {
                    return;
                }
            }
            event.preventDefault(); 
        });
    },

    _codeInArray : function(event,codes) {
        for(code in codes)
        {
            if(event.keyCode == codes[code])
            {
                return true;
            }
        }
        return false;
    }
});
Mathew Foscarini
sumber
apakah ini memastikan $ dan kemudian + - sebagai karakter pertama atau pertama / kedua dan kemudian hanya 1 titik desimal?
gordon
6

Ini sepertinya tidak bisa dipecahkan.

// Prevent NULL input and replace text.
$(document).on('change', 'input[type="number"]', function (event) {
    this.value = this.value.replace(/[^0-9\.]+/g, '');
    if (this.value < 1) this.value = 0;
});

// Block non-numeric chars.
$(document).on('keypress', 'input[type="number"]', function (event) {
    return (((event.which > 47) && (event.which < 58)) || (event.which == 13));
});
Jonathan
sumber
5

Perlu memastikan Anda memiliki tombol angka dan tombol tab yang berfungsi juga

 // Allow only backspace and delete
            if (event.keyCode == 46 || event.keyCode == 8  || event.keyCode == 9) {
                // let it happen, don't do anything
            }
            else {
                // Ensure that it is a number and stop the keypress
                if ((event.keyCode >= 48 && event.keyCode <= 57) || (event.keyCode >= 96 && event.keyCode <= 105)) {

                }
                else {
                    event.preventDefault();
                }
            }
Coppermill
sumber
5

Saya ingin membantu sedikit, dan saya membuat versi saya, onlyNumbersfungsinya ...

function onlyNumbers(e){
    var keynum;
    var keychar;

    if(window.event){  //IE
        keynum = e.keyCode;
    }
    if(e.which){ //Netscape/Firefox/Opera
        keynum = e.which;
    }
    if((keynum == 8 || keynum == 9 || keynum == 46 || (keynum >= 35 && keynum <= 40) ||
       (event.keyCode >= 96 && event.keyCode <= 105)))return true;

    if(keynum == 110 || keynum == 190){
        var checkdot=document.getElementById('price').value;
        var i=0;
        for(i=0;i<checkdot.length;i++){
            if(checkdot[i]=='.')return false;
        }
        if(checkdot.length==0)document.getElementById('price').value='0';
        return true;
    }
    keychar = String.fromCharCode(keynum);

    return !isNaN(keychar);
}

Cukup tambahkan tag input "... input ... id =" price "onkeydown =" return onlyNumber (event) "..." dan Anda selesai;)

macet
sumber
5

Saya juga ingin menjawab :)

    $('.justNum').keydown(function(event){
        var kc, num, rt = false;
        kc = event.keyCode;
        if(kc == 8 || ((kc > 47 && kc < 58) || (kc > 95 && kc < 106))) rt = true;
        return rt;
    })
    .bind('blur', function(){
        num = parseInt($(this).val());
        num = isNaN(num) ? '' : num;
        if(num && num < 0) num = num*-1;
        $(this).val(num);
    });

Itu saja ... hanya angka. :) Hampir bisa bekerja hanya dengan 'blur', tapi ...

Pedro Soares
sumber
5

Cara sederhana untuk memeriksa bahwa nilai yang dimasukkan adalah angka:

var checknumber = $('#textbox_id').val();

    if(jQuery.isNumeric(checknumber) == false){
        alert('Please enter numeric value');
        $('#special_price').focus();
        return;
    }
Pragnesh Rupapara
sumber
5

Hanya perlu menerapkan metode ini di Jquery dan Anda dapat memvalidasi kotak teks Anda untuk hanya menerima nomor saja.

function IsNumberKeyWithoutDecimal(element) {    
var value = $(element).val();
var regExp = "^\\d+$";
return value.match(regExp); 
}

Coba solusi ini di sini

Jitender Kumar
sumber
5

Anda dapat mencoba input nomor HTML5:

<input type="number" placeholder="enter the number" min="0" max="9">

Elemen tag input ini sekarang hanya akan mengambil nilai antara 0 hingga 9 karena atribut min diatur ke 0 dan atribut maks diatur ke 9.

untuk informasi lebih lanjut tentang kunjungi http://www.w3schools.com/html/html_form_input_types.asp

kkk
sumber