【发布时间】:2019-01-07 19:13:59
【问题描述】:
我正在尝试将两个 Javascript 函数组合到一个代码中。第一个以“.commas”类为目标的函数在 3 位数字后插入一个逗号。第二个称为“函数floatKey”,最后两位数字前只允许一个小数点。
我尝试将“.commas”类函数插入第二个类函数并删除“event.preventDefault if 语句”,但结果是不确定的——它允许小数点后有更多数字以及逗号。它还删除了小数点前的所有逗号。我还允许“charCode 44”作为“函数 floatKey”中“if 语句”的例外,但它所做的只是显示并立即消失逗号插入。我将如何结合这两个功能使两者都工作?
我的代码:“.commas”类函数:
$(".commas").keyup(function(event){
if(event.which >= 37 && event.which <= 40){
event.preventDefault();
}
var $this = $(this);
var num = $this.val().replace(/,/gi, "");
var num2 = num.split(/(?=(?:\d{3})+$)/).join(",");
console.log(num2);
$this.val(num2);
});
函数“floatKey”:
function floatKey(el, evt) {
var charCode = (evt.which) ? evt.which : event.keyCode;
var number = el.value.split('.');
if (charCode != 46 && charCode > 31 && (charCode < 48 || charCode > 57)) {
return false;
}
if(number.length>1 && charCode == 46){
return false;
}
var caratPos = getSelectionStart(el);
var dotPos = el.value.indexOf(".");
if( caratPos > dotPos && dotPos>-1 && (number[1].length > 1)){
return false;
}
return true;
}
希望我把我的问题解释得够清楚了,谢谢你的帮助。
【问题讨论】:
-
同时,在响应者消化代码并编写答案的同时,您可以将事件处理逻辑与字符串转换逻辑分开。这样你就可以更容易地推理你的问题。 (字符串转换你甚至可以很容易地测试)
-
预期的输入和输出是什么? IE: 123456 变成 1,234.56 ?
-
@Twisty 是的 - 预期的输出应该是这样。
-
或者更清楚地说,对于输入 - 当在输入字段中输入数字时,会在 3 位数字后自动插入一个逗号(第一个函数已经这样做了)。输入时会自动生成输出,如您的示例 1,234.56
标签: javascript jquery numbers decimal