我正在创建一个网页,其中有一个输入文本框,我想只允许输入数字字符,例如 (0,1,2,3,4,5...9) 0-9。
使用jQuery如何实现这个功能?
我正在创建一个网页,其中有一个输入文本框,我想只允许输入数字字符,例如 (0,1,2,3,4,5...9) 0-9。
使用jQuery如何实现这个功能?
注意: 这是一个更新的答案。下面的评论是针对旧版本的,该版本会搞乱按键码。
在 JSFiddle 上试一试 on JSFiddle.
目前没有原生的 jQuery 实现方法,但您可以使用以下的 inputFilter
插件来过滤文本输入框的输入值(支持复制+粘贴、拖放、键盘快捷键、上下文菜单操作、不可输入的键、插入符位置、不同的键盘布局、有效性错误消息和 自 IE 9 以来的所有浏览器):
// Restricts input for the set of matched elements to the given inputFilter function.
(function($) {
$.fn.inputFilter = function(callback, errMsg) {
return this.on("input keydown keyup mousedown mouseup select contextmenu drop focusout", function(e) {
if (callback(this.value)) {
// Accepted value
if (["keydown","mousedown","focusout"].indexOf(e.type) >= 0){
$(this).removeClass("input-error");
this.setCustomValidity("");
}
this.oldValue = this.value;
this.oldSelectionStart = this.selectionStart;
this.oldSelectionEnd = this.selectionEnd;
} else if (this.hasOwnProperty("oldValue")) {
// Rejected value - restore the previous one
$(this).addClass("input-error");
this.setCustomValidity(errMsg);
this.reportValidity();
this.value = this.oldValue;
this.setSelectionRange(this.oldSelectionStart, this.oldSelectionEnd);
} else {
// Rejected value - nothing to restore
this.value = "";
}
});
};
}(jQuery));
inputFilter
插件来安装输入过滤器:$(document).ready(function() {
$("#myTextBox").inputFilter(function(value) {
return /^\d*$/.test(value); // Allow digits only, using a RegExp
},"Only digits allowed");
});
将您喜欢的样式应用于输入错误类。以下是建议:
.input-error{
outline: 1px solid red;
}
实际上不需要jQuery,您也可以使用纯JavaScript来完成相同的事情。请参见此答案。
HTML 5具有本地解决方案,即<input type="number">
(请参见规范),但请注意,浏览器支持程度各异:
step
、min
和max
属性。e
和E
。请参见此问题。请在 w3schools.com 上自行尝试on。
这是我使用的函数:
// 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));
});
});
};
你可以通过以下方式将它连接到你的控件上:
You can then attach it to your control by doing:
$("#yourTextBoxName").ForceNumericOnly();
key == 13 ||
来确保允许按回车键提交表单等操作。 - Pawel Cioch内联:
<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">
onkeyup="if (/\D/g.test(this.value)) this.value = this.value.replace(/\D/g,'')"
。 - Patrick Fisher/[^0-9]|^0+(?!$)/g
以防止前导零的连续出现。 - Johny Skovdal您可以像这样使用输入事件:
$(document).on("input", ".numeric", function() {
this.value = this.value.replace(/\D/g,'');
});
但是,什么是代码特权?
0.0
到 24.0
之间的十进制数?我无法让它输入小数点 .
。 - Transformerthis.value = Number(this.value.replace(/\D/g, ''));
。 - HasanG/^[0-9]+$/.test(input);
如果输入是数字,返回true;否则返回false。
对于事件按键码,只需使用以下代码:
// 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();
}
简短而精炼 - 即使在30多个回答之后,这也不会引起太多注意 ;)
$('#number_only').bind('keyup paste', function(){
this.value = this.value.replace(/[^0-9]/g, '');
});
使用JavaScript函数isNaN,
if (isNaN($('#inputid').val()))
if (isNaN(document.getElementById('inputid').val()))
if (isNaN(document.getElementById('inputid').value))
更新: 这里有一篇不错的文章介绍了如何使用jQuery实现此功能:限制HTML文本框中的输入为数字值
document.getElementById('inputid').val()
这还是 jQuery 的东西。使用 .value
。 - mpenisNaN
是不好的,因为会涉及到JavaScript类型转换。 - josh37360.0
到 24.0
之间的十进制数?我无法让它输入小数点 .
。 - Transformer$(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
该代码使用jQuery和JavaScript来限制文本字段仅接受数字输入。它将捕获键盘输入事件并根据按下的键是否为数字或控制字符(如删除、Tab等)来决定是否允许输入。同时,它还可以过滤粘贴的内容以确保它们只包含数字。我在我们内部的公用JS文件中使用此代码。 我只需将此类添加到需要此行为的任何输入中即可。
$(".numericOnly").keypress(function (e) {
if (String.fromCharCode(e.keyCode).match(/[^0-9]/g)) return false;
});
为什么要这么复杂呢?因为有HTML5的pattern属性,所以您甚至不需要jQuery:
<input type="text" pattern="[0-9]*">
很赞的一点是它在移动设备上会弹出数字键盘,比使用jQuery方便得多。