我使用以下代码仅制作字段数字。一切顺利,但它允许超过一个小数点。专家请帮助..
$("#" + fieldId).keydown(function (e) {
// Allow: backspace, delete, tab, escape, enter and .
if ($.inArray(e.keyCode, [46, 8, 9, 27, 13, 190,110]) !== -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;
}
// 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();
}
});
答案 0 :(得分:0)
尝试类似(来自here)
$('.number').keypress(function(event) {
if ((event.which != 46 || $(this).val().indexOf('.') != -1) &&
((event.which < 48 || event.which > 57) &&
(event.which != 0 && event.which != 8))) {
event.preventDefault();
}
var text = $(this).val();
if ((text.indexOf('.') != -1) &&
(text.substring(text.indexOf('.')).length > 1) &&
(event.which != 0 && event.which != 8) &&
($(this)[0].selectionStart >= text.length - 1)) {
event.preventDefault();
}
});
答案 1 :(得分:0)
Number.prototype.countDecimals = function () {
if(Math.floor(this.valueOf()) === this.valueOf()) return 0;
return this.toString().split(".")[1].length || 0;
}
实施例
var x = 23.453453453;
x.countDecimals(); // 9
在 event.preventDefault();
之前检查计数这可能会对你有帮助。
$("#" + fieldId).keydown(function (e) {
// Allow: backspace, delete, tab, escape, enter and .
if ($.inArray(e.keyCode, [46, 8, 9, 27, 13, 190,110]) !== -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;
}
// Ensure that it is a number and stop the keypress
if ($("#" + fieldId).val().countDecimals() >=2 || (e.shiftKey || (e.keyCode < 48 || e.keyCode > 57)) && (e.keyCode < 96 || e.keyCode > 105)) {
e.preventDefault();
}
});
答案 2 :(得分:0)
如果您对您的解决方案感到满意并且您只想允许一个抽取,那么您将只需添加额外的行来检查,我使用您的代码但我将keydown更改为 keypress 否则它将无法正常工作为了捕捉点字符,我添加了( ||($(this).val()。split(“。”)。length - 1&gt; 0&amp;&amp; String.fromCharCode(e.which)= ='。'))代码末尾:
- 添加的代码只检查是否已经有一个点,如果按下的键是点。
$("#" + fieldId).keypress(function (e) {
// Allow: backspace, delete, tab, escape, enter and .
if ($.inArray(e.keyCode, [46, 8, 9, 27, 13, 190,110]) !== -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;
}
// Ensure that it is a number and stop the keypress
if ($("#" + fieldId).val().countDecimals() >=2 || (e.shiftKey || (e.keyCode < 48 || e.keyCode > 57)) && (e.keyCode < 96 || e.keyCode > 105 || ($(this).val().split(".").length - 1 > 0 && String.fromCharCode(e.which) == '.'))) {
e.preventDefault();
}
});
你的打瞌睡方式不会阻止用户粘贴无效内容,你可以用这段代码阻止用户使用dat:
$("#" + fieldId).bind('paste', function (e)
{
e.preventDefault();
});
我建议你不要因为以下问题而对kepress或keydown进行验证:
- 我会建议你验证模糊,以便用户获得编辑的自由,你可以确保验证输入的真实内容。