jQuery:限制文本框仅输入“数字”的最佳方法是啥? (允许小数点)
Posted
技术标签:
【中文标题】jQuery:限制文本框仅输入“数字”的最佳方法是啥? (允许小数点)【英文标题】:jQuery: what is the best way to restrict "number"-only input for textboxes? (allow decimal points)jQuery:限制文本框仅输入“数字”的最佳方法是什么? (允许小数点) 【发布时间】:2010-10-27 20:40:57 【问题描述】:限制文本框仅输入“数字”的最佳方法是什么?
我正在寻找允许小数点的东西。
我看到很多例子。但尚未决定使用哪一个。
来自 Praveen Jeganathan 的更新
没有更多的插件,jQuery 在 v1.7 中添加了自己的 jQuery.isNumeric()
。
见:https://***.com/a/20186188/66767
【问题讨论】:
这是一个基于意见的问题,但非常有用。应该允许基于意见的问题。寻找此信息的人只需要知道这只是基于意见的答案。一个标签就足够了。 【参考方案1】:如果您想限制输入(而不是验证),您可以使用键事件。像这样:
<input type="text" class="numbersOnly" value="" />
还有:
jQuery('.numbersOnly').keyup(function ()
this.value = this.value.replace(/[^0-9\.]/g,'');
);
这会立即让用户知道他们不能输入字母字符等,而不是稍后在验证阶段。
您仍然需要验证,因为输入可能通过使用鼠标剪切和粘贴来填充,或者可能通过可能不会触发关键事件的表单自动完成器来填充。
【讨论】:
+1 - 我打算提出同样的建议。值得注意的是,这种形式的验证可以在每次击键时进行,而不是在最后一次。我唯一要添加的是某种形式的警告,即用户输入的内容被拒绝。简单地不显示字母会让太多人认为他们的键盘坏了。或许可以巧妙地改变背景或边框颜色.. 只要用户知道您的应用实际上正在做某事。 同意。我在tarbuilders.com 有一个例子。如果您单击“联系人”,表单会即时检查用户输入,如果有效,则会出现绿色边框和复选标记。无效 -> 红色和“x” 请参阅this answer 修复箭头键问题。 请注意,您仍然可以通过单击鼠标右键 > 粘贴来粘贴字符和字母。解决此问题的一种简单方法是:$doc.on('keyup blur input propertychange', 'input[name="price"]', function()$(this).val($(this).val().replace(/[^0-9\.]/g,'')););
CRAP,如果我写数字,即“123”,然后按字母键,即“a”,它会清空输入...【参考方案2】:
更新
有一个新的非常简单的解决方案:
它允许您在文本
<input>
上使用任何类型的输入过滤器, 包括各种数字过滤器。这将正确处理 复制+粘贴、拖放、键盘快捷键、上下文菜单操作、 不可键入的键和所有键盘布局。
查看this answer 或亲自尝试on JSFiddle。
jquery.numeric 插件
我已经使用jquery.numeric 插件成功实现了许多表单。
$(document).ready(function()
$(".numeric").numeric();
);
此外,这也适用于 textareas!
但是,请注意,Ctrl+A、复制+粘贴(通过上下文菜单)和拖放将不会按预期工作。
html 5
随着对 HTML 5 标准的更广泛支持,我们可以对 input
元素使用 pattern
属性和 number
类型来限制仅输入数字。在某些浏览器(尤其是 Google Chrome)中,它也可以限制粘贴非数字内容。有关number
和其他较新输入类型的更多信息,请访问here。
【讨论】:
此插件不允许您在 Opera 中使用退格键。 @Darryl 源代码只有几十行,所以我确定对其进行修改以使其变得微不足道。我刚刚找到了这个插件并对其进行了修改,现在只要我只想允许整数值,就有一个allowDecimal
选项。源代码非常简单而且写得很好。
这在复制粘贴到type="number"
的输入字段时不起作用。
@Tallmaris 这确实是一个非常古老的问题和答案。 HTML 发生了很多变化,应予以考虑。
嗨@TheVillageIdiot,你是对的。我不想在评论中显得粗鲁(这可能有点干):) 事实是我看到了一些最近的 cmets,所以我只是想澄清一下,目前这可能不是最好的解决方案问题。【参考方案3】:
我认为最好的答案是上面的那个。
jQuery('.numbersOnly').keyup(function ()
this.value = this.value.replace(/[^0-9\.]/g,'');
);
但我同意箭头键和删除按钮将光标捕捉到字符串的末尾有点痛苦(因此在测试中它被踢回给我)
我添加了一个简单的更改
$('.numbersOnly').keyup(function ()
if (this.value != this.value.replace(/[^0-9\.]/g, ''))
this.value = this.value.replace(/[^0-9\.]/g, '');
);
这样,如果有任何按钮不会导致文本被更改,请忽略它。有了这个,你可以点击箭头并删除而不跳到最后,但它会清除任何非数字文本。
【讨论】:
为了获得更好的性能,创建一个带有替换结果的 var,而不是运行两次。keypress
可以用来进一步简化这一点,因为显然keyup
和keydown
触发任何键盘键,而keypress
only 触发“字符" 键(因此 不 触发箭头和删除键)。请参阅此答案以供参考:***.com/a/1367720/1298685
接受多于一位的小数。如何只接受一位小数。我已申请金额文本字段。它也需要 12.5.6。如何限制一分。
@IanCampbell 按键意味着您可以输入一个不会被删除的字符开头。不会工作。 Keydown 做同样的事情。我只能用 keyup 让它工作。【参考方案4】:
jquery.numeric 插件有一些我已通知作者的错误。它允许在 Safari 和 Opera 中使用多个小数点,并且您不能在 Opera 中键入退格键、箭头键或其他几个控制字符。我需要正整数输入,所以最后我只写了自己的。
$(".numeric").keypress(function(event)
// Backspace, tab, enter, end, home, left, right
// We don't support the del key in Opera because del == . == 46.
var controlKeys = [8, 9, 13, 35, 36, 37, 39];
// IE doesn't support indexOf
var isControlKey = controlKeys.join(",").match(new RegExp(event.which));
// Some browsers just don't raise events for control keys. Easy.
// e.g. Safari backspace.
if (!event.which || // Control keys in most browsers. e.g. Firefox tab is 0
(49 <= event.which && event.which <= 57) || // Always 1 through 9
(48 == event.which && $(this).attr("value")) || // No 0 first digit
isControlKey) // Opera assigns values for control keys.
return;
else
event.preventDefault();
);
【讨论】:
使用此代码根本无法输入 0。在 Mac 上使用 Chrome 和 FF 测试。 我更新了这个以接受 0 位数字 (48 == event.which && ($(this).val() > 0 )) || // 第一个数字没有 0 这是一个很好的解决方案,但它缺少小数,只需添加 (46 == event.which && !($(this).val().includes("."))) || 根本无法输入 0。【参考方案5】:没有更多的插件,jQuery 已经实现了自己的jQuery.isNumeric(),在 v1.7 中添加。
jQuery.isNumeric( value )
判断其参数是否为数字。
样本结果
$.isNumeric( "-10" ); // true
$.isNumeric( 16 ); // true
$.isNumeric( 0xFF ); // true
$.isNumeric( "0xFF" ); // true
$.isNumeric( "8e5" ); // true (exponential notation string)
$.isNumeric( 3.1415 ); // true
$.isNumeric( +10 ); // true
$.isNumeric( 0144 ); // true (octal integer literal)
$.isNumeric( "" ); // false
$.isNumeric(); // false (empty object)
$.isNumeric( NaN ); // false
$.isNumeric( null ); // false
$.isNumeric( true ); // false
$.isNumeric( Infinity ); // false
$.isNumeric( undefined ); // false
这是一个如何将 isNumeric() 与事件侦听器绑定的示例
$(document).on('keyup', '.numeric-only', function(event)
var v = this.value;
if($.isNumeric(v) === false)
//chop off the last char entered
this.value = this.value.slice(0,-1);
);
【讨论】:
+1 表示没有插件。我想添加一个细微的变化以允许数千个分隔符。代替var v = this.value;
将其更改为 var v = this.value.replace(/,/g,'');
。像21,345,67.800
这样的数字太考虑了。
有谁知道这是如何检查数字的?它使用键码还是正则表达式?如果您考虑不同的键盘布局,这一点很重要。
这非常接近。但是,如果您按住字符键,它不会正确运行检查。角色将“奔跑”。试试这个:$(document).on('keyup keypress', '#somethingSomething', function() var aValue = $(this).val(); if($.isNumeric(aValue) === false) $(this).val(aValue.slice(0,-1)); );
【参考方案6】:
上面提到的 numeric() 插件在 Opera 中不起作用(您不能退格、删除甚至使用后退或前进键)。
JQuery 或 javascript 中的以下代码都可以完美运行(而且只有两行)。
JQuery:
$(document).ready(function()
$('.key-numeric').keypress(function(e)
var verified = (e.which == 8 || e.which == undefined || e.which == 0) ? null : String.fromCharCode(e.which).match(/[^0-9]/);
if (verified) e.preventDefault();
);
);
Javascript:
function isNumeric(e)
var keynum = (!window.event) ? e.which : e.keyCode;
return !((keynum == 8 || keynum == undefined || e.which == 0) ? null : String.fromCharCode(keynum).match(/[^0-9]/));
当然,这仅适用于纯数字输入(加退格、删除、前进/后退键),但可以轻松更改为包含点和减号。
【讨论】:
小键盘也是不允许的【参考方案7】:您可以使用Validation plugin 及其number() 方法。
$("#myform").validate(
rules:
field:
required: true,
number: true
);
【讨论】:
仅供参考 - number() 不适用于指数数字。【参考方案8】:号码输入限制不需要长代码,试试这个代码。
它还接受有效的 int 和 float 两个值。
Javascript 方法
onload =function()
var ele = document.querySelectorAll('.number-only')[0];
ele.onkeypress = function(e)
if(isNaN(this.value+""+String.fromCharCode(e.charCode)))
return false;
ele.onpaste = function(e)
e.preventDefault();
<p> Input box that accepts only valid int and float values.</p>
<input class="number-only" type=text />
jQuery 方法
$(function()
$('.number-only').keypress(function(e)
if(isNaN(this.value+""+String.fromCharCode(e.charCode))) return false;
)
.on("cut copy paste",function(e)
e.preventDefault();
);
);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<p> Input box that accepts only valid int and float values.</p>
<input class="number-only" type=text />
更新
以上答案适用于最常见的用例 - 将输入验证为数字。
允许负数 在删除之前显示无效的击键。但下面是特殊用例的代码sn-p
$(function()
$('.number-only').keyup(function(e)
if(this.value!='-')
while(isNaN(this.value))
this.value = this.value.split('').reverse().join('').replace(/[\D]/i,'')
.split('').reverse().join('');
)
.on("cut copy paste",function(e)
e.preventDefault();
);
);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<p> Input box that accepts only valid int and float values.</p>
<input class="number-only" type=text />
【讨论】:
【参考方案9】:下面是我用来阻止击键的内容。这只允许数字 0-9 和小数点。易于实现,代码不多,而且工作起来就像一个魅力:
<script>
function isNumberKey(evt)
var charCode = (evt.which) ? evt.which : event.keyCode;
if (charCode != 46 && charCode > 31 && (charCode < 48 || charCode > 57))
return false;
else
return true;
</script>
<input value="" onkeypress="return isNumberKey(event)">
【讨论】:
如果有人想知道 - 您可以通过从 if 语句中删除charCode != 46
来限制小数。很好的答案!
没错,我删除了 charCode != 46 以跳过小数。谢谢kaleazy,这个答案对我很有用。
这是一个糟糕的解决方案,因为它没有考虑退格键、箭头、控制键和其他必要的击键。
我刚刚发布了一个与此类似的解决方案,但也可以处理退格、箭头并且不使用硬编码的键码。在这里查看:***.com/a/23468513/838608【参考方案10】:
作为to this suggestion 的一个小改进,您可以使用Validation plugin 及其number()、digits 和range 方法。例如,以下内容可确保您获得 0 到 50 之间的正整数:
$("#myform").validate(
rules:
field:
required: true,
number: true,
digits: true,
range : [0, 50]
);
【讨论】:
【参考方案11】:您不会在按键时看到字母神奇的外观和消失。这也适用于鼠标粘贴。
$('#txtInt').bind('input propertychange', function ()
$(this).val($(this).val().replace(/[^0-9]/g, ''));
);
【讨论】:
虽然不允许使用小数,但我发现这是最简单的整数方法。 对于十进制,您可以将正则表达式更新为/[^0-9.]/g
我不需要小数。只是因为 OP 做到了,但是是的 :)【参考方案12】:
我首先尝试使用 jQuery 解决这个问题,但我对在 keyup 上删除之前实际上出现在输入字段中的不需要的字符(非数字)感到不满意。
寻找其他解决方案我发现了这个:
整数(非负数)
<script>
function numbersOnly(oToCheckField, oKeyEvent)
return oKeyEvent.charCode === 0 ||
/\d/.test(String.fromCharCode(oKeyEvent.charCode));
</script>
<form name="myForm">
<p>Enter numbers only: <input type="text" name="myInput"
onkeypress="return numbersOnly(this, event);"
onpaste="return false;" /></p>
</form>
来源:https://developer.mozilla.org/en-US/docs/Web/API/GlobalEventHandlers.onkeypress#Example 实例:http://jsfiddle.net/u8sZq/
小数点(非负数)
要允许一个小数点,你可以这样做:
<script>
function numbersOnly(oToCheckField, oKeyEvent)
var s = String.fromCharCode(oKeyEvent.charCode);
var containsDecimalPoint = /\./.test(oToCheckField.value);
return oKeyEvent.charCode === 0 || /\d/.test(s) ||
/\./.test(s) && !containsDecimalPoint;
</script>
来源:刚刚写了这个。似乎正在工作。 实例:http://jsfiddle.net/tjBsF/
其他自定义
要允许输入更多符号,只需将这些符号添加到用作基本字符代码过滤器的正则表达式中。 要实现简单的上下文限制,请查看输入字段 (oToCheckField.value) 的当前内容(状态)您可能有兴趣做的一些事情:
只允许一位小数 仅当位于字符串开头时才允许减号。这将允许负数。不足之处
插入符号位置在函数内部不可用。这大大减少了您可以实现的上下文限制(例如,没有两个相等的连续符号)。不确定访问它的最佳方式是什么。我知道标题要求使用 jQuery 解决方案,但希望有人会发现这很有用。
【讨论】:
【参考方案13】:感谢戴夫·亚伦·史密斯的帖子
我编辑了您的答案以接受数字部分的小数点和数字。这项工作非常适合我。
$(".numeric").keypress(function(event)
// Backspace, tab, enter, end, home, left, right,decimal(.)in number part, decimal(.) in alphabet
// We don't support the del key in Opera because del == . == 46.
var controlKeys = [8, 9, 13, 35, 36, 37, 39,110,190];
// IE doesn't support indexOf
var isControlKey = controlKeys.join(",").match(new RegExp(event.which));
// Some browsers just don't raise events for control keys. Easy.
// e.g. Safari backspace.
if (!event.which || // Control keys in most browsers. e.g. Firefox tab is 0
(49 <= event.which && event.which <= 57) || // Always 1 through 9
(96 <= event.which && event.which <= 106) || // Always 1 through 9 from number section
(48 == event.which && $(this).attr("value")) || // No 0 first digit
(96 == event.which && $(this).attr("value")) || // No 0 first digit from number section
isControlKey) // Opera assigns values for control keys.
return;
else
event.preventDefault();
);
【讨论】:
【参考方案14】: window.jQuery.fn.ForceNumericOnly =
function ()
return this.each(function ()
$(this).keydown(function (event)
// Allow: backspace, delete, tab, escape, and enter
if (event.keyCode == 46 || event.keyCode == 8 || event.keyCode == 9 || event.keyCode == 27 || event.keyCode == 13 ||
// Allow: Ctrl+A
(event.keyCode == 65 && event.ctrlKey === true) ||
// Allow: home, end, left, right
(event.keyCode >= 35 && event.keyCode <= 39))
// let it happen, don't do anything
return;
else
// Ensure that it is a number and stop the keypress
if (event.shiftKey || (event.keyCode < 48 || event.keyCode > 57) && (event.keyCode < 96 || event.keyCode > 105))
event.preventDefault();
);
);
;
并将其应用于您想要的所有输入:
$('selector').ForceNumericOnly();
【讨论】:
【参考方案15】:这个函数做同样的事情,使用了上面的一些想法。
$field.keyup(function()
var val = $j(this).val();
if(isNaN(val))
val = val.replace(/[^0-9\.]/g,'');
if(val.split('.').length>2) val =val.replace(/\.+$/,"");
$j(this).val(val);
);
显示视觉反馈(不正确的字母在消失之前出现)
允许小数
捕获多个“.”
左/右 del 等没有问题。
【讨论】:
【参考方案16】:根据 CanIUse 截至 2015 年 10 月,HTML5 支持输入类型编号,全球浏览器支持率 88% 以上。
<input type="number" step="0.01" min="0" name="askedPrice" id="askedPrice" />
这不是 JQuery 相关的解决方案,但优点是在手机上 android 键盘将针对输入数字进行优化。
或者,可以使用带有新参数“pattern”的输入类型文本。 HTML5 规范中的更多细节。
我认为它比 jquery 解决方案更好,因为在这个问题中提供的 jquery 解决方案不支持千位分隔符。如果你可以使用html5。
JSFiddle: https://jsfiddle.net/p1ue8qxj/
【讨论】:
【参考方案17】:/* 这是我的跨浏览器版本 How to allow only numeric (0-9) in HTML inputbox using jQuery? */
$("#inputPrice").keydown(function(e)
var keyPressed;
if (!e) var e = window.event;
if (e.keyCode) keyPressed = e.keyCode;
else if (e.which) keyPressed = e.which;
var hasDecimalPoint = (($(this).val().split('.').length-1)>0);
if ( keyPressed == 46 || keyPressed == 8 ||((keyPressed == 190||keyPressed == 110)&&(!hasDecimalPoint && !e.shiftKey)) || keyPressed == 9 || keyPressed == 27 || keyPressed == 13 ||
// Allow: Ctrl+A
(keyPressed == 65 && e.ctrlKey === true) ||
// Allow: home, end, left, right
(keyPressed >= 35 && keyPressed <= 39))
// let it happen, don't do anything
return;
else
// Ensure that it is a number and stop the keypress
if (e.shiftKey || (keyPressed < 48 || keyPressed > 57) && (keyPressed < 96 || keyPressed > 105 ))
e.preventDefault();
);
【讨论】:
【参考方案18】:只需通过 parseFloat() 运行内容。它会在输入无效时返回NaN
。
【讨论】:
【参考方案19】:您可以使用 autoNumeric from decorplanit.com 。它们对数字以及货币、四舍五入等都有很好的支持。
我在 IE6 环境中使用过,只对 css 进行了一些调整,并且相当成功。
例如,可以定义一个 css 类 numericInput
,它可以用来用数字输入掩码装饰您的字段。
改编自 autoNumeric 网站:
$('input.numericInput').autoNumeric(aSep: '.', aDec: ','); // very flexible!
【讨论】:
autoNumeric 绝对是正确的选择【参考方案20】:如果您使用的是 HTML5,则无需费力地执行验证。只需使用 -
<input type="number" step="any" />
step属性允许小数点有效。
【讨论】:
不是这样,Firefox 和 Opera 允许非数字文本输入 @MichaelDeMutis 你说得对,它允许非数字文本输入,但在 FF 中验证失败(我还没有机会在 Opera 中进行测试)。【参考方案21】:我认为这是解决这个问题的好方法,而且非常简单:
$(function()
var pastValue, pastSelectionStart, pastSelectionEnd;
$("input").on("keydown", function()
pastValue = this.value;
pastSelectionStart = this.selectionStart;
pastSelectionEnd = this.selectionEnd;
).on("input propertychange", function()
var regex = /^[0-9]+\.?[0-9]*$/;
if (this.value.length > 0 && !regex.test(this.value))
this.value = pastValue;
this.selectionStart = pastSelectionStart;
this.selectionEnd = pastSelectionEnd;
);
);
例子: JSFiddle
涵盖的场景
这里的大多数类似建议至少有一个失败,或者需要大量代码才能涵盖所有这些场景。
-
只允许 1 个小数点。
允许
home
、end
和arrow
键。
允许在任何索引处使用 delete
和 backspace
。
允许在任何索引处进行编辑(只要输入与正则表达式匹配)。
允许 ctrl+v 和 shift+insert 进行有效输入(与右键单击 + 粘贴相同)。
不闪烁文本值,因为未使用keyup
事件。
在输入无效后恢复选择。
场景失败
以0.5
开头并仅删除零将不起作用。这可以通过将正则表达式更改为/^[0-9]*\.?[0-9]*$/
来解决,然后添加一个模糊事件以在文本框以小数点开头时添加0
(如果需要)。请参阅此advanced scenario,以更好地了解如何解决此问题。
插件
我创建了这个简单的jquery plugin 来简化此操作:
$("input").limitRegex(/^[0-9]+\.?[0-9]*$/);
【讨论】:
【参考方案22】:最好的方法是在失去焦点时检查文本框的内容。
您可以使用正则表达式检查内容是否为“数字”。
或者您可以使用验证插件,它基本上会自动执行此操作。
【讨论】:
正则表达式为 /^\d*\。0,1\d+$/【参考方案23】:检查此查找代码以供数据库使用:
function numonly(root)
>>var reet = root.value;
var arr1 = reet.length;
var ruut = reet.charAt(arr1-1);
>>>if (reet.length > 0)
var regex = /[0-9]|\./;
if (!ruut.match(regex))
var reet = reet.slice(0, -1);
$(root).val(reet);
>>>>
//Then use the even handler onkeyup='numonly(this)'
【讨论】:
【参考方案24】:这是我刚刚完成的 sn-p(使用 Peter Mortensen / Keith Bentrup 的部分代码)对文本字段进行整数百分比验证(需要 jQuery):
/* This validates that the value of the text box corresponds
* to a percentage expressed as an integer between 1 and 100,
* otherwise adjust the text box value for this condition is met. */
$("[id*='percent_textfield']").keyup(function(e)
if (!isNaN(parseInt(this.value,10)))
this.value = parseInt(this.value);
else
this.value = 0;
this.value = this.value.replace(/[^0-9]/g, '');
if (parseInt(this.value,10) > 100)
this.value = 100;
return;
);
这段代码:
允许使用主数字键和数字小键盘。 验证排除 Shift 数字字符(例如 #、$、% 等) 将 NaN 值替换为 0 用大于 100 的 100 个值替换希望对有需要的人有所帮助。
【讨论】:
【参考方案25】:在这里找到了一个很好的解决方案http://ajax911.com/numbers-numeric-field-jquery/
我只是根据我的要求将“keyup”更改为“keydown”
【讨论】:
【参考方案26】:在输入中保持插入符号位置的其他方式:
$(document).ready(function()
$('.numbersOnly').on('input', function()
var position = this.selectionStart - 1;
fixed = this.value.replace(/[^0-9\.]/g, ''); //remove all but number and .
if(fixed.charAt(0) === '.') //can't start with .
fixed = fixed.slice(1);
var pos = fixed.indexOf(".") + 1;
if(pos >= 0)
fixed = fixed.substr(0,pos) + fixed.slice(pos).replace('.', ''); //avoid more than one .
if (this.value !== fixed)
this.value = fixed;
this.selectionStart = position;
this.selectionEnd = position;
);
);
优点:
-
用户可以使用箭头键、Backspace、Delete、...
在您想粘贴数字时使用
Plunker:Demo working
【讨论】:
【参考方案27】:我刚刚发现了一个更好的插件。 给你更多的控制权。 假设您有一个 DOB 字段,您需要它是数字但也接受“/”或“-”字符。
效果很好!
查看http://itgroup.com.ph/alphanumeric/。
【讨论】:
【参考方案28】: $(".numeric").keypress(function(event)
// Backspace, tab, enter, end, home, left, right
// We don't support the del key in Opera because del == . == 46.
var controlKeys = [8, 9, 13, 35, 36, 37, 39];
// IE doesn't support indexOf
var isControlKey = controlKeys.join(",").match(new RegExp(event.which));
// Some browsers just don't raise events for control keys. Easy.
// e.g. Safari backspace.
if (!event.which || // Control keys in most browsers. e.g. Firefox tab is 0
(49 <= event.which && event.which <= 57) || // Always 1 through 9
(48 == event.which && $(this).attr("value")) || // No 0 first digit
isControlKey) // Opera assigns values for control keys.
return;
else
event.preventDefault();
);
这段代码对我来说效果很好,我只需要在 controlKeys 数组中添加 46 来使用句点,尽管我认为这不是最好的方法;)
【讨论】:
【参考方案29】:我用了这个,效果很好..
ini=$("#id").val();
a=0;
$("#id").keyup(function(e)
var charcode = (e.which) ? e.which : e.keyCode;
// for decimal point
if(!(charcode===190 || charcode===110))
// for numeric keys andcontrol keys
if (!((charcode>=33 && charcode<=57) ||
// for numpad numeric keys
(charcode>=96 && charcode<=105)
// for backspace
|| charcode==8))
alert("Sorry! Only numeric values allowed.");
$("#id").val(ini);
// to include decimal point if first one has been deleted.
if(charcode===8)
ini=ini.split("").reverse();
if(ini[0]==".")
a=0;
else
if(a==1)
alert("Sorry! Second decimal point not allowed.");
$("#id").val(ini);
a=1;
ini=$("#id").val();
);
find keycodes at http://www.cambiaresearch.com/articles/15/javascript-char-codes-key-codes
【讨论】:
【参考方案30】:这很简单,我们已经有一个javascript内置函数“isNaN”。
$("#numeric").keydown(function(e)
if (isNaN(String.fromCharCode(e.which)))
return false;
);
【讨论】:
以上是关于jQuery:限制文本框仅输入“数字”的最佳方法是啥? (允许小数点)的主要内容,如果未能解决你的问题,请参考以下文章