Как разрешить только числовые (0-9) в HTML inputbox с помощью jQuery?
Я создаю веб-страницу, где у меня есть текстовое поле ввода, в котором я хочу, чтобы разрешить только числовые символы, такие как (0,1,2,3,4,5...9) 0-9.
Как я могу сделать это с помощью jQuery?
30 ответов:
взгляните на это плагин (вилка числового плагина jQuery texotela). это (jStepper) еще один.
этой ссылка, Если вы хотите построить его самостоятельно.
$(document).ready(function() { $("#txtboxToFilter").keydown(function (e) { // Allow: backspace, delete, tab, escape, enter and . if ($.inArray(e.keyCode, [46, 8, 9, 27, 13, 110]) !== -1 || // Allow: Ctrl+A, Command+A (e.keyCode === 65 && (e.ctrlKey === true || e.metaKey === true)) || // Allow: home, end, left, right, down, up (e.keyCode >= 35 && e.keyCode <= 40)) { // let it happen, don't do anything return; } // Ensure that it is a number and stop the keypress if ((e.shiftKey || (e.keyCode < 48 || e.keyCode > 57)) && (e.keyCode < 96 || e.keyCode > 105)) { e.preventDefault(); } }); });
Примечание: Если ваша веб-страница использует HTML5, вы можете использовать встроенный
<input type="number">
и с помощьюmin
иmax
свойства для управления минимальным и максимальным значением.
следующая сводится к минимуму, а также позволяет использовать CTRL+X,CTRL+C и CTRL+V
$(function() { $('#staticParent').on('keydown', '#child', function(e){-1!==$.inArray(e.keyCode,[46,8,9,27,13,110])||(/65|67|86|88/.test(e.keyCode)&&(e.ctrlKey===true||e.metaKey===true))&&(!0===e.ctrlKey||!0===e.metaKey)||35<=e.keyCode&&40>=e.keyCode||(e.shiftKey||48>e.keyCode||57<e.keyCode)&&(96>e.keyCode||105<e.keyCode)&&e.preventDefault()}); })
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script> <div id="staticParent"> <input id="child" type="textarea" /> </div>
вот функция, которую я использую:
// 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();
Inline:
<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">
вы можете просто использовать простое регулярное выражение JavaScript для проверки чисто числовых символов:
/^[0-9]+$/.test(input);
это возвращает true, если вход числовой или false, если нет.
или для события keycode, простое использование ниже:
// 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(); }
вы можете использовать на входном событии, как это:
$(document).on("input", ".numeric", function() { this.value = this.value.replace(/\D/g,''); });
но что это за привилегия кода?
- он работает на мобильных браузерах (keydown и keyCode имеют проблемы).
- он также работает на AJAX-генерируемом контенте, потому что мы используем "on".
- лучшая производительность, чем keydown, например, при вставке события.
использовать функцию JavaScript isNaN,
if (isNaN($('#inputid').val()))
if (isNaN (document.getElementById ('inputid').val ()))if (isNaN(document.getElementById('inputid').value))
обновление: И вот хорошая статья, говорящая об этом, но с использованием jQuery:ограничение ввода в текстовых полях HTML числовыми значениями
короткий и сладкий - даже если это никогда не найдет много внимания после 30 + ответов ;)
$('#number_only').bind('keyup paste', function(){ this.value = this.value.replace(/[^0-9]/g, ''); });
$(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
Я использую это в нашем внутреннем общем файле js. Я просто добавляю класс к любому входу, который нуждается в этом поведении.
$(".numericOnly").keypress(function (e) { if (String.fromCharCode(e.keyCode).match(/[^0-9]/g)) return false; });
проще один для меня
jQuery('.plan_eff').keyup(function () { this.value = this.value.replace(/[^1-9\.]/g,''); });
почему так сложно? Вам даже не нужен jQuery, потому что есть атрибут шаблона HTML5:
<input type="text" pattern="[0-9]*">
самое классное, что он вызывает цифровую клавиатуру на мобильных устройствах, что намного лучше, чем использование jQuery.
Вы можете сделать то же самое, используя это очень простое решение
$("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" />
Я имел в виду этой ссылке для решения. Он отлично работает!!!
атрибут pattern в HTML5 задает регулярное выражение, по которому проверяется значение элемента.
<input type="text" pattern="[0-9]{1,3}" value="" />
Примечание: атрибут pattern работает со следующими типами ввода: текст, поиск, url, тел, электронная почта и пароль.
[0-9] можно заменить любым условием регулярного выражения.
{1,3} представляет минимум 1 и максимум 3 цифры могут быть введены.
что-то довольно простое, используя jQuery.проверить
$(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)');
функция 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 } }
Я пришел к очень хорошему и простому решению, которое не мешает пользователю выбирать текст или копировать вставку, как это делают другие решения. jQuery style:)
$("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
вы можете использовать эту функцию на 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()"/>
Я думаю, что это поможет всем
$('input.valid-number').bind('keypress', function(e) { return ( e.which!=8 && e.which!=0 && (e.which<48 || e.which>57)) ? false : true ; })
вот быстрое решение, я создал некоторое время назад. подробнее об этом вы можете прочитать в моей статье:
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); });
вот ответ, который использует jquery UI Widget factory. Вы можете легко настроить, какие символы разрешены.
$('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; } });
Это кажется нерушимой.
// 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)); });
Я написал свой на основе сообщения @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; } }); });
Я тоже хотел бы ответить:)
$('.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); });
вот и все...только цифры. :) Почти он может работать только с "размытием", но...
вы хотели бы разрешить 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(); } } });
простой способ проверить, что введите числовое значение:
var checknumber = $('#textbox_id').val(); if(jQuery.isNumeric(checknumber) == false){ alert('Please enter numeric value'); $('#special_price').focus(); return; }
просто нужно применить этот метод в Jquery, и вы можете проверить свое текстовое поле, чтобы просто принять только номер.
function IsNumberKeyWithoutDecimal(element) { var value = $(element).val(); var regExp = "^\d+$"; return value.match(regExp); }
попробуйте это решение здесь
вы можете попробовать ввести номер HTML5:
<input type="number" placeholder="enter the number" min="0" max="9">
этот элемент входного тега теперь будет принимать значение только от 0 до 9 поскольку минимальный атрибут установлен в 0, а максимальный атрибут установлен в 9.
для получения дополнительной информации о посещении http://www.w3schools.com/html/html_form_input_types.asp
нужно убедиться, что у вас есть цифровая клавиатура и клавиша tab тоже работает
// 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(); } }