Javascript 当我按back space时,逗号插入到输入框中,数字的格式不符合要求
我正在制作一个输入框,在输入时插入逗号作为千位分隔符(印度货币样式)。它工作得很好。但当我按下backspace键时,它会插入不必要的逗号,而逗号不会被重新排列 例如:当我输入1111111时,我得到的结果是11,11111,但当我按backspace并使其为11,11,11时,它不会被调整Javascript 当我按back space时,逗号插入到输入框中,数字的格式不符合要求,javascript,jquery,html,css,ajax,Javascript,Jquery,Html,Css,Ajax,我正在制作一个输入框,在输入时插入逗号作为千位分隔符(印度货币样式)。它工作得很好。但当我按下backspace键时,它会插入不必要的逗号,而逗号不会被重新排列 例如:当我输入1111111时,我得到的结果是11,11111,但当我按backspace并使其为11,11,11时,它不会被调整 <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.0.0/jquery.min.js"></script> &l
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.0.0/jquery.min.js"></script>
<script type="text/javascript">
$('input.number').keyup(function(event) {
// skip for arrow keys
if(event.which >= 37 && event.which <= 40) return;
// format number
$(this).val(function(index, value) {
var x=value;
x=x.toString();
var lastThree = x.substring(x.length-3);
var otherNumbers = x.substring(0,x.length-3);
if(otherNumbers != '')
lastThree = ',' + lastThree;
var res = otherNumbers.replace(/\D/g, "").replace(/\B(?=(\d{2})+(?!\d))/g, ",") + lastThree;
return res;
//document.getElementById("textInput").value=res;
//return value.replace(/\D/g, "").replace(/\B(?=(\d{3})+(?!\d))/g, ",");
});
});
</script>
<input class="number" style="width:140px; height:40px; outline: 0;" >
$('input.number').keyup(函数(事件){
//跳过箭头键
如果(event.which>=37&&event.which在回调函数中添加一个简单的console.log(x)
(在var x=value;
行之后)显示问题所在:
当输入字段中已有1111
时,然后按backspace键,光标位于其末尾,则该函数的输入值为1,11
(因为backspace删除了当前值的最后一个字符)–然后用var lastThree=x.substring(x.length-3);
行从中提取最后三个字符,得到,11
,然后再次将其附加到最终结果中–因此得到两个连续的逗号
我认为最简单的解决方法是在开始处理值之前删除所有逗号
$(this).val(function(index, value) {
var x=value.replace(/,/g, "");
// rest of code here
–这将为您提供一个“干净”的值,其中没有任何逗号,这样您通过子字符串方法定位该值部分的逻辑就不会被它们抛出
(而且输入字段的值始终是字符串,因此x=x.toString();
是多余的。)
$('input.number').keyup(
功能(事件)
{
//跳过箭头键
如果((event.which>=48&&event.which=96&&event.which您可能想对您的代码进行一点格式化,不是吗?我明白了,很抱歉,当我按backspace时,我需要重新表述这个问题。例如:当我输入1111111时,我得到结果11,11111,但当我按backspace并使其成为11,11,11时,它不会得到调整。@dfsqi尝试过,但它没有工作中,我没有得到想要的结果。我也在添加我的解决方案,如果我出错或冗余,请更正。不仅是非常冗余,但有些部分没有任何意义-例如使用f.e.parseFloat
,然后在下一行中再次将其设为字符串值,这应该实现什么?我不明白为什么您会这样做uld需要一个额外的分支来处理退格键–如果您已经在使用我建议的解决方案,在处理该值之前简单地从该值中删除逗号,那么这应该完成什么?它可能“起作用”是的,我明白了,我用了你的解决方案,在我的慢行退格中,导致逗号排列错误
<script type="text/javascript">
$('input.number').keyup(
function(event)
{
// skip for arrow keys
if((event.which >= 48 && event.which <= 57)||(event.which >= 96 && event.which <= 105))
{
// format number
$(this).val(
function(index, value)
{
var x=value;
var x=value.replace(/,/g, "");
x=x.toString();
var lastThree = x.substring(x.length-3);
var otherNumbers = x.substring(0,x.length-3);
if(otherNumbers != '')
lastThree = ',' + lastThree;
var res = otherNumbers.replace(/\D/g, "").replace(/\B(?=(\d{2})+(?!\d))/g, ",") + lastThree;
return res;
//document.getElementById("textInput").value=res;
//return value.replace(/\D/g, "").replace(/\B(?=(\d{3})+(?!\d))/g, ",");
}
);
}
else
{
if(event.which == 8)
{
$(this).val(function(index, value)
{
var x=parseFloat(value.replace(/,/g, ''));
x=x.toString();
var lastThree = x.substring(x.length-3);
var otherNumbers = x.substring(0,x.length-3);
if(otherNumbers != '')
lastThree = ',' + lastThree;
var res = otherNumbers.replace(/\D/g, "").replace(/\B(?=(\d{2})+(?!\d))/g, ",") + lastThree;
return res;
//document.getElementById("textInput").value=res;
//return value.replace(/\D/g, "").replace(/\B(?=(\d{3})+(?!\d))/g, ",");
}
);
}
else
{
return;
}
}
}
);
</script>