1.在客户输入数量的时候,能够将客户输入的数量三位三位的分开显示,具体如“123,456,234”等等,并且保留二位小数。
function getArray(obj) {
var string = obj.value;
var s = string.replace(/,/g, "");
var ss = s.substr(0, s.indexOf("."));
var length = 0;
if (ss != "")
length = ss.length;
else
length = s.length;
var len = parseInt(length / 3);
var len_y = length % 3;
if (len_y == 0) {
len--;
len_y = 3;
}
var rs = "";
for (i = 0; i <= len; i++) {
if (i == 0)
rs = s.substring(0, len_y);
else {
if (rs != "") rs = rs + ",";
rs = rs + s.substring(len_y + (i - 1) * 3, i * 3 + len_y);
}
}
if (obj.value != "" && s.indexOf(".") < 0)
obj.value = rs + ".00";
else
obj.value = rs + s.substr(s.indexOf("."),3);
}
然后在jsp或者html,反正就是页面中text文本框添加οnkeyup="getArray(this);"就好。
这里边有个比较关键的地方,就是过滤文本框中的数字中的“,”,js的replace(a,b)函数比较缺德,智能过滤掉第一个出现的字符串a,而不能替换掉所有的。而没有replacementAll()函数,所以必须要靠强大的正则来过滤掉所有的出现过的a了。于是用上“/g”,最开始我们使用的是“/[\,]/g”,结果一个过滤不了。最后单步调试。发现了函数吧整个引号中的部分当做过滤字符串的原型来查找,当然找不到啦,所以最后抱着试一试的心情,改成现在这个样子就行了。
另外不得 不说的就是这个onkeyup和onkeypress的区别。我最开始采用的是onkeypress 事件,发生了很有意思的一件事情。各位高人可以试一试。onkeypress事件发生时还没有取得输入的字符,而onkeyup事件在发生时已经取得所输入的字符。
2.失焦后,格式化数字——————s为输入内容,n为保留的小数位数
function fmoney(s, n)
{
n = n > 0 && n <= 20 ? n : 2;
s = parseFloat((s + "").replace(/[^\d\.-]/g, "")).toFixed(n) + "";
var l = s.split(".")[0].split("").reverse(),
r = s.split(".")[1];
t = "";
for(i = 0; i < l.length; i ++ )
{
t += l[i] + ((i + 1) % 3 == 0 && (i + 1) != l.length ? "," : "");
}
return t.split("").reverse().join("") + "." + r;
}
3.保存的时候还原数字
function rmoney(s)
{
return parseFloat(s.replace(/[^\d\.-]/g, ""));
}
聚焦事件 onfocus
失焦事件 onblur