我一直在环顾四周,似乎无法找到办法。当用户在输入字段中输入数字时,例如:
<input type="text" class="numberOnly" id="miles" value="" />
如何在输入内容时更新内容。 e.g:
输入:100000
输出:100,000
我有一些类似的代码,在我计算它们时会格式化其他一些东西,这里是我用来格式化其他数字的函数。
function format_num(number) {
number += '';
x = number.split('.');
x1 = x[0];
x2 = x.length > 1 ? '.' + x[1] : '';
var rgx = /(\d+)(\d{3})/;
while (rgx.test(x1)) {
x1 = x1.replace(rgx, '$1' + ',' + '$2');
}
return x1 + x2;
}
这很好用,就像我说的那样我不知道如何将用户输入值放入其中并在输入时将输出返回到输入字段。
注意:我需要格式化多个输入字段。
更新
我的代码中有这个,每次按下键盘都会触发,因此可以使用。这用于整个表单,因此每次按下按钮时表单都会更新。
$(".numberOnly").keypress(function (e) {
//if the letter is not digit then display error and don't type anything
if (e.which != 8 && e.which != 46 && e.which != 0 && (e.which < 48 || e.which > 57)) {
//display error message
$("#errmsg").html("Digits Only").show().fadeOut(1600);
return false;
} else {
$('input').keyup(function () {
});
}
});
更新2:
是否可以为它进行一种叠加,例如:输入的值是1000,但叠加显示它用作1000?
任何帮助都会很棒。 非常感谢!
答案 0 :(得分:1)
尝试使用onkeypress事件。检查一下
<input type="text" class="numberOnly" id="miles" value="" onkeypress="format_num(id)" />
<SCRIPT LANGUAGE="JavaScript">
<!--
function format_num(id) {
var number = document.getElementById(id).value;
number += '';
number = number.replace(",","");
x = number.split('.');
x1 = x[0];
x2 = x.length > 1 ? '.' + x[1] : '';
var rgx = /(\d+)(\d{3})/;
while (rgx.test(x1)) {
x1 = x1.replace(rgx, '$1' + ',' + '$2');
}
document.getElementById(id).value = x1 + x2;
}
//-->
</SCRIPT>
答案 1 :(得分:0)
好问题。我不得不在过去处理类似的问题(在我的情况下,有两个小数点的浮点数,所以我必须跟踪小数点)。当时找不到任何体面的开箱即用解决方案。我最终做的与你的方法类似。但是,您可以动态编辑输入值,而不是显示错误消息:检测不需要的字符并将其从字符串中删除
$myInput.val(filterUnwantedCharacters($myInput.val()))
这里的一个问题是,一旦你这样做,一些浏览器会将插入位置重置为零,因此你可能想要跟踪插入位置并在设置输入值后设置它。您可能会发现这很有用:http://www.examplet.org/jquery/caret.php
此外,您可能希望在keydown
而非keypress
上格式化输入,对用户来说会更自然。
这不是最简单的任务,但有一点耐心,你可以建立一个相当不错的格式化程序。祝你好运!