Как разрешить только числовые (0-9) в поле ввода HTML, используя jQuery?

901

Я создаю веб-страницу, где у меня есть поле ввода текста, в котором я хочу разрешить только числовые символы, такие как (0,1,2,3,4,5 ... 9) 0-9.

Как я могу сделать это с помощью jQuery?

Прашант
источник
73
Помните, что вы не можете полагаться на проверку на стороне клиента - вам также необходимо выполнить проверку на сервере в случае, если у пользователя отключен JavaScript или он не использует браузер, совместимый с JavaScript.
CJK
45
вы рассматривали html5? <input type = "number" />. с помощью атрибутов min и max вы также можете ограничить ввод
ZX12R
5
Я думаю, что вы должны проверять входные значения в событии keyup, а не проверять коды клавиш, потому что это намного надежнее при различиях в клавиатурах, а что нет.
Ричард
13
Я полностью согласен с Ричардом: не используйте коды клавиш. Принятый ответ не работает, например, на французских клавиатурах, поскольку вам нужно нажать «Shift», чтобы набирать цифры на этих клавиатурах. Ключевые коды просто слишком рискованные, ИМХО.
MiniQuark
3
@ ZX12R Не работает ни в одной из текущих версий IE. Хорошо, если вы используете свежую версию самого кода, чтобы быть свежим, но на самом деле это не вариант практически для любого профессионального проекта. caniuse.com/#feat=input-number
Эрик

Ответы:

1260

Примечание. Это обновленный ответ. Комментарии ниже относятся к старой версии, которая путалась с кодами клавиш.

JQuery

Попробуйте сами на JSFiddle .

Для этого нет собственной реализации jQuery, но вы можете отфильтровать входные значения текста <input>с помощью следующего inputFilterплагина (поддерживает Копирование + Вставка, Перетаскивание + Отбрасывание, сочетания клавиш, операции с контекстным меню, неиспользуемые клавиши, положение каретки, другое раскладки клавиатуры и все браузеры начиная с 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));

Теперь вы можете использовать inputFilterплагин для установки входного фильтра:

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

Посмотрите демонстрацию JSFiddle для большего количества примеров входного фильтра. Также обратите внимание, что вы все равно должны выполнить проверку на стороне сервера!

Чистый JavaScript (без jQuery)

JQuery на самом деле не нужен для этого, вы можете сделать то же самое с чистым JavaScript. Смотрите этот ответ .

HTML 5

HTML 5 имеет собственное решение с <input type="number">(см. Спецификацию ), но обратите внимание, что поддержка браузера варьируется:

  • Большинство браузеров проверяют ввод только при отправке формы, а не при вводе.
  • Большинство мобильных браузеров не поддерживают step, minи maxатрибуты.
  • Chrome (версия 71.0.3578.98) по-прежнему позволяет пользователю вводить символы eи Eв поле. Также посмотрите этот вопрос .
  • Firefox (версия 64.0) и Edge (EdgeHTML версия 17.17134) по-прежнему позволяют пользователю вводить любой текст в поле.

Попробуйте сами на w3schools.com .

emkey08
источник
45
Спасибо! event.keyCode == 46 || event.keyCode == 8 || event.keyCode == 190, если вы хотите десятичные дроби
Майкл Л. Уотсон
9
Добавьте ключевые коды 37 и 39, чтобы разрешить навигацию влево и вправо в текстовом поле, например: if (event.keyCode == 46 || event.keyCode == 8 || event.keyCode == 37 || event.keyCode == 39)
Энтони Квин
22
ооо, только что подобрал вопрос для этого у наших тестеров. Вы должны запретить пользователю удерживать нажатой клавишу shift и нажимать цифровые клавиши, иначе ввод позволит! @ # $% ^ & * ()
Аллен Райс
6
Подтвердил сдвиг + ошибка. Кроме того, цифровая клавиатура ALT + позволяет почти все (т.е. Alt + 321 = A, Alt + 322 = B и т. Д.). Еще один случай для проверки на стороне сервера.
Энтони Квин
140
Я действительно не согласен с этим ответом: играть с кодами клавиш действительно слишком рискованно, потому что вы не можете быть уверены, какова раскладка клавиатуры. Например, на французских клавиатурах пользователи должны нажимать клавишу shift, чтобы набирать цифры. Так что этот код не будет работать вообще. Поэтому, пожалуйста, пройдите валидацию вместо взлома кода.
MiniQuark
182

Вот функция, которую я использую:

// 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));
        });
    });
};

Затем вы можете прикрепить его к своему контролю, выполнив:

$("#yourTextBoxName").ForceNumericOnly();
Kelsey
источник
2
Я нашел это полезным, но я нашел раздражающую «ошибку». когда я использую это на моем iMac, он допускает некоторые буквы, такие как а и е. Похоже, что цифры на клавиатуре компьютера - это буквы на iMac, а клавиатура Mac такая же, как и обычные цифры. Кто-нибудь знает, как заставить его работать на Mac и ПК?
Волмар
3
Клавиши «Домой», «Конец» тоже не работают. Это лучшее решение, которое предложил Питер: west-wind.com/weblog/posts/2011/Apr/22/…
bman
Почему есть return this.each(function() ?
Powtac
2
@powtac - поэтому вы можете вызывать .ForceNumericOnly () для нескольких объектов. Например ... $ ("input [type = 'text']"). ForceNumericOnly ()
Оливер Пирмен
1
@powtac eachот return this.each(function()должен разрешить несколько объектов, как сказал HaggleLad, а returnчасть должна вернуть объект jQuery обратно вызывающей стороне, чтобы разрешить цепочки, такие как$("input[type='text'").ForceNumericOnly().show()
Хосе Руи Сантос
149

В линию:

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

Ненавязчивый стиль (с 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">

Патрик Фишер
источник
2
Это перемещает каретку до конца, даже если пользователь нажимает клавишу со стрелкой влево.
Phrogz
1
@phrogz, попробуйте следующее: onkeyup="if (/\D/g.test(this.value)) this.value = this.value.replace(/\D/g,'')".
Патрик Фишер
Это работает отлично, и предотвращает Shift + число в отличие от тех, которые указаны выше.
Ник Хартли
5
@ mhenry1384 Это ожидаемое поведение. Я считаю, что это хорошая обратная связь, но если вам это не нравится, то подход с ключевым кодом будет именно тем, что вы ищете.
Патрик Фишер
2
Вы можете изменить, чтобы /[^0-9]|^0+(?!$)/gпредотвратить ведущие серии ноль.
Джонни Сковдал
105

Вы можете просто использовать простое регулярное выражение JavaScript для проверки чисто числовых символов:

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

Это возвращает истину, если ввод числовой или ложь, если нет.

или для кода события, просто используйте ниже:

     // 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();
    }
Уманг
источник
11
Смотрите мой ответ для реализации этого подхода.
Патрик Фишер
Разве это не займет меньше процессорного времени для проверки числового нажатия клавиши, чем для проверки регулярного выражения?
andrsnn
87

Вы можете использовать на входном событии, как это:

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

Но что это за кодовая привилегия?

  • Работает на мобильных браузерах (проблемы с keydown и keyCode).
  • Он работает и с контентом, сгенерированным AJAX, потому что мы используем «on».
  • Лучшая производительность, чем при нажатии клавиш, например, при вставке события.
Hamid Afarinesh Far
источник
6
Я чувствую, что это гораздо более надежное (и более простое) решение, чем принятый ответ.
Джереми Харрис
Еще проще, если использовать замену (/ \ D / g, '')
Alfergon
привет, как я могу обеспечить числовое значение с decimalпромежуточным 0.0до 24.0я не могу позволить ему войти в.
трансформатор
Я бы предложил использоватьthis.value = Number(this.value.replace(/\D/g, ''));
HasanG
Хороший ответ, позволяет легко переключать, является ли ввод числовым или нет, переключая класс
raklos
55

Коротко и мило - даже если это никогда не привлечет большого внимания после 30+ ответов;)

  $('#number_only').bind('keyup paste', function(){
        this.value = this.value.replace(/[^0-9]/g, '');
  });
Rid Iculous
источник
5
Я бы заменил keyup вводом, в противном случае вы можете удерживать нажатой букву, а затем щелкнуть, чтобы вывести фокус из текстового поля, и текст останется без изменений. входные данные уверяют, что это не может произойти
WizLiz
Спасибо за регулярное выражение - но это немного лучший обработчик событий: $ ('# number_only'). On ('input propertychange', function () {this.value = this.value.replace (/ [^ 0-9] /г, ''); });
BradM
3
К вашему сведению - вопрос не задавался, но это не учитывает десятичные дроби (например, 12.75). Связывание «input», а не «keyup» обеспечивает более плавный UX, вместо того, чтобы видеть их символ в течение доли секунды, а затем удалить его.
Пол
44

Используйте функцию JavaScript isNaN ,

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

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

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

Обновление: и здесь хорошая статья, рассказывающая об этом, но использующая jQuery: ограничение ввода в текстовых полях HTML числовыми значениями

Amr Elgarhy
источник
40
Ну ... "Не использую JQuery", за исключением части вашего примера, которая использует JQuery ...
GalacticCowboy
document.getElementById('inputid').val()чувак .. это все еще JQuery. .val()это вещь JQuery. использование.value
mpen
привет, как я могу гарантировать, что числовое значение с decimalпромежуточным 0.0до 24.0я не могу позволить ему войти в.
трансформатор
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(); 
            }   
        }
    });
});

Источник: http://snipt.net/GerryEng/jquery-making-textfield-only-accept-numeric-values

Ивар
источник
6
Ничего себе, пустые блоки "если" и магические числа оба! Я просто рвал немного во рту. : D А если серьезно, зачем идти на все эти неприятности, если вы можете просто сопоставить входные данные с регулярным выражением /^[.\d]+$/? И что означает «8»?
Алан Мур
@ Алан: Хаха, я понятия не имею - я скопировал прямо из источника. Вместо этого я написал бы «if (event.keyCode! = 46 && event.keyCode! = 8)» или использовал бы регулярное выражение, как вы сказали. Я полагаю, 8 представляет ключ удаления.
Ивар
4
Попробуйте, например, нажать Shift + 8 - ваша проверка позволит * войти
Антон
Это хорошо. Было бы намного лучше, если бы он обрабатывал клавишу Shift + Numbers (специальные символы, такие как! @ # $% ^ ..)
Shyju 29.10.10
27

Я использую это в нашем внутреннем общем файле JS. Я просто добавляю класс к любому входу, который нуждается в таком поведении.

$(".numericOnly").keypress(function (e) {
    if (String.fromCharCode(e.keyCode).match(/[^0-9]/g)) return false;
});
Mijk
источник
1
Хороший, элегантный и полезный код! Спасибо. Но вы должны добавить события keyup и keydown.
Сильвио Дельгадо
25

Проще для меня это

jQuery('.plan_eff').keyup(function () {     
  this.value = this.value.replace(/[^1-9\.]/g,'');
});
Summved Jain
источник
7
Просто нужно убедиться, что вы используете, this.value.replace(/[^0-9\.]/g,'');чтобы включить требования OP 0-9
Chalise
24

Почему так сложно? Вам даже не нужен jQuery, потому что есть атрибут шаблона HTML5:

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

Круто то, что он выводит цифровую клавиатуру на мобильные устройства, что намного лучше, чем использование jQuery.

гость
источник
2
Это должно иметь намного больше голосов. Во всяком случае, вы могли бы также добавить запасное регулярное выражение для браузеров, отличных от html5, но проверка данных в любом случае должна выполняться на стороне сервера.
Маркус
Похоже, что он хорошо поддерживается большинством браузеров, поэтому поддержка modernizr не так важна: caniuse.com/#search=pattern Safari работает очень хорошо, даже если он указан как частично поддерживаемый на этом сайте. Попробуй это!
гость
@guest Большое спасибо за это. Самый быстрый и простой ответ! Лучший ответ на мой взгляд.
BinaryJoe01
19

Вы можете сделать то же самое, используя это очень простое решение

$("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" />

Я ссылался на эту ссылку для решения. Работает отлично !!!

Ганеш Бабу
источник
Может быть, это лучше /\d|\./, чтобы позволить. десятичные числа
Zango
Это прекрасно работает в crome. Но не в Mozilla FireFox
Kirataka
привет, как я могу гарантировать, что числовое значение с decimalпромежуточным 0.0до 24.0я не могу позволить ему войти в.
трансформатор
не работает с копировальной пастой
mrid
14

Вы можете попробовать ввести номер HTML5 :

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

Для несовместимых браузеров существуют запасные варианты Modernizr и Webforms2 .

Виталий Федоренко
источник
это все еще позволяет запятую
apfz
14

Атрибут pattern в HTML5 определяет регулярное выражение, по которому проверяется значение элемента.

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

Примечание. Атрибут pattern работает со следующими типами ввода: текст, поиск, URL, телефон, электронная почта и пароль.

  • [0-9] можно заменить любым условием регулярного выражения.

  • {1,3} представляет минимум 1 и максимум 3 цифры.

оборота викиси
источник
привет, как я могу гарантировать, что числовое значение с decimalпромежуточным 0.0до 24.0я не могу позволить ему войти в.
трансформатор
1
@transformer попробуйте это <input type = "number" pattern = "[0-9] + ([\.,] [0-9] +)?" step = "0.01">
vickisys
11

Что-то довольно простое, используя 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
источник
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
    }
}
user261922
источник
привет, как я могу гарантировать, что числовое значение с decimalпромежуточным 0.0до 24.0я не могу позволить ему войти в.
трансформатор
8

Я пришел к очень хорошему и простому решению, которое не мешает пользователю выбирать текст или вставлять копии, как это делают другие решения. 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
Винсент
источник
Эй, я использую это, но то, что я действительно ищу, - это позволить ему расставить точки 1,2 или 3.455 вот так
Vivekh
8

Вы можете использовать эту функцию JavaScript:

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;
        }
    }
}

И вы можете привязать его к вашему текстовому полю следующим образом:

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

Я использую выше в производстве, и он отлично работает, и это кросс-браузер. Кроме того, он не зависит от jQuery, поэтому вы можете привязать его к текстовому полю с помощью встроенного JavaScript:

<input type="text" name="aNumberField" onkeydown="javascript:maskInput()"/>
karim79
источник
Это терпит неудачу, когда кто-то вставляет не числовой текст во входные данные. Есть идеи, как мы можем преодолеть это? Не могу обдумать это.
Киран Рут R
7

Я думаю, что это поможет всем

  $('input.valid-number').bind('keypress', function(e) { 
return ( e.which!=8 && e.which!=0 && (e.which<48 || e.which>57)) ? false : true ;
  })
Будто
источник
Вы забываете о вводе с клавиатуры. Это будет включать в себя:if(event.which!=8 && event.which!=0 && (event.which<48 || event.which>57) && (event.which<96 || event.which>105)) return;
Tomvo
6

Я написал свой, основываясь на посте @ user261922, немного измененном, чтобы вы могли выбрать все, вкладку и обрабатывать несколько полей «только для чисел» на одной странице.

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
источник
6

Вот быстрое решение, которое я создал некоторое время назад. Вы можете прочитать больше об этом в моей статье:

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);
});
Дима
источник
6

Вы хотели бы разрешить вкладку:

$("#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
источник
6

Вот ответ, который использует фабрику jQuery UI Widget. Вы можете настроить, какие символы разрешены легко.

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

Это позволило бы цифры, знаки числа и суммы в долларах.

$.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;
    }
});
Мэтью Фоскарини
источник
гарантирует ли это $ и затем + - в качестве первого или первого / второго символа, а затем только 1 десятичную точку?
Гордон
6

Это кажется неразрушимым.

// 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));
});
Джонатан
источник
5

Необходимо убедиться, что у вас есть цифровая клавиатура и клавиша табуляции тоже работает

 // 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
источник
5

Я хотел немного помочь, и я сделал свою версию, onlyNumbersфункцию ...

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);
}

Просто добавьте в тег ввода "... input ... id =" price "onkeydown =" return onlyNumbers (event) "..." и все готово;)

падения
источник
5

Я тоже хотел бы ответить :)

    $('.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);
    });

Вот и все ... только цифры. :) Почти это может работать только с «размытием», но ...

Педро Соареш
источник
5

Простой способ проверить, является ли введенное значение числовым:

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

    if(jQuery.isNumeric(checknumber) == false){
        alert('Please enter numeric value');
        $('#special_price').focus();
        return;
    }
Прагнеш Рупапара
источник
5

Просто нужно применить этот метод в Jquery, и вы можете проверить свое текстовое поле, чтобы просто принять только номер.

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

Попробуйте это решение здесь

Джитендер Кумар
источник
5

Вы можете попробовать ввести номер HTML5:

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

Этот элемент тега ввода теперь будет принимать значение только от 0 до 9, поскольку атрибут min установлен в 0, а атрибут max установлен в 9.

Для получения дополнительной информации посетите http://www.w3schools.com/html/html_form_input_types.asp

KKK
источник