我使用以下代码检查文本框中的值是否为数字:
(function ($) {
$.fn.numeric = function (options) {
return this.each(function () {
var $this = $(this);
$this.keypress(options, function (e) {
// allow backspace and delete
if (e.which == 8 || e.which == 0)
return true;
//if the letter is not digit
if (e.which < 48 || e.which > 57)
return false;
// check max range
var dest = e.which - 48;
var result = this.value + dest.toString();
if (result > e.data.max) {
return false;
}
});
});
};
})(jQuery);
在输入文本框元素上使用时,我将其声明如下
$(input).numeric({ max: 999});
问题是它正在处理输入和检查 value应该是整数而不是字符串。
但我需要更改它将验证双倍的代码。
所以如果我插入0.22就可以,但是如果我要插入.22 它不会填充数字。
请帮忙
答案 0 :(得分:1)
检查此答案和评论(尤其是已接受的评论): Validate decimal numbers in JavaScript - IsNumeric()
否则,是否真的有必要检查每个按键上的值?
答案 1 :(得分:1)
此代码应该按预期工作:
(function($) {
$.fn.numeric = function(options) {
return this.each(function() {
var $this = $(this);
$this.keypress(options, function(e) {
// allow backspace and delete
if (e.which == 8 || e.which == 0) {
return true;
}
// allow float
if (e.which == 46 && this.value.length >=1 && this.value.indexOf('.') == -1) {
return true;
}
//if the letter is not digit
if (e.which < 48 || e.which > 57) return false;
// check max range
var dest = e.which - 48;
var result = this.value + dest.toString();
if (result > e.data.max) {
return false;
}
});
});
};
})(jQuery);
答案 2 :(得分:0)
我尝试调试代码。您只需要更新'。'即可。 ASCII值为'。' (点)是46.如果您进行以下更改,它将起作用!
(e.which == 8 || e.which == 0)
(e.which == 8 || e.which == 0||e.which==46)
$('input').numeric({ max: 999});
alert(parseInt($('input').val()));
我看到上面的变化解决了这个问题:)请告诉我,如果它不起作用:)
答案 3 :(得分:0)
在每个keypress
事件上进行验证可能很麻烦,只是从按键返回false不会让用户知道为什么不允许他们输入该密钥。您可能在标签中标记为数字的字段或类似的字段,但您可以提供给用户的任何额外帮助,即使用户只是您自己,也可以节省很多烦恼。这样的事情怎么样?
(function($) {
$.fn.numeric = function(options) {
return this.each(function () {
var $this = $(this);
$this.blur(function(e) {
if (isNaN(+this.value)) {
$('<span class="error">Must be numeric</span>').insertAfter($this);
} else {
$this.next('span.error').remove();
}
});
});
};
}(jQuery));
此外,您还需要从选项中添加最小/最大支票。为了这个例子,我删除了它。
最后,如果您要进行大量验证,可能需要使用jQuery Validation之类的验证库,而不是自己动手。
答案 4 :(得分:0)
我按照@Guillaume建议的解决方案。但我添加了附加条件
if (this.value.length > e.data.maxLength)
return false;
所以下面的所有代码
(function ($) {
$.fn.numeric = function (options) {
return this.each(function () {
var $this = $(this);
$this.keypress(options, function (e) {
// allow backspace and delete
if (e.which == 8 || e.which == 0)
return true;
if (e.which == 46 && this.value.length >= 1 && this.value.indexOf('.') == -1) {
return true;
}
//if the letter is not digit
if (e.which < 48 || e.which > 57)
return false;
// check max range
var dest = e.which - 48;
var result = this.value + dest.toString();
if (result > e.data.max) {
return false;
}
if (this.value.length > e.data.maxLength)
return false;
});
});
};
})(jQuery);
并使用它
$(input).numeric({ max: 999,maxLength:4});
maxLength - 属性表示最大输入长度