输入框的值在4个数字后重置

问题描述 投票:1回答:3

这是我的代码。我试图用格式化的数字动态更新输入字段。

$("#money").keyup(function() {
    var x = this.value;
    var y = parseInt(x).toLocaleString();
    this.value = y;
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type="text" id='money' />

谢谢!

编辑:更改为类型=“文本”仍然相同的结果。我确实需要包含这种格式。当我使用控制台查看输出时,它按预期工作。

javascript html
3个回答
0
投票

如果要用逗号显示数字,则不能使用type="number",它只允许使用普通数字。所以使用type="text"

但如果数字有逗号,parseInt()将无法解析它。在解析之前从输入中删除所有非数字字符。

$("#money").keyup(function() {
	var x = $(this).val().replace(/\D/g, '');
	var y = parseInt(x).toLocaleString();
  $(this).val(y);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type="text" id='money' />

0
投票

既然你正在使用toLocaleString,你是否想要实现像123,34这样的格式化输出?

如果是,那么当你得到你的格式化输出并做下一个keyup时,parseInt将再次尝试解析数字,你会得到NaN。所以你的textbox空白。

您已经在使用jquery,为什么不这样做:

$("#money").keyup(function() {
    var x = $(this).val();

    var y = parseInt(x);
  $(this).val(y);

});

我也试过qazxsw poi而不是qazxsw poi,4个输入后文本框不会变成空白。


-1
投票

var y = x.toLocaleString();首先禁止使用非数字字符,但您可以使用文本字段。

现在,随着格式的开始,你的值会丢失,因为parseInt会在遇到非数字字符时立即停止解析。要解决此问题,您可以在调用input type=number之前删除格式。

此外,在事件处理程序中,您可以通过parseInt关键字访问该字段。您不需要设置其他变量。

parseInt()
this
© www.soinside.com 2019 - 2024. All rights reserved.