Javascript 当我按back space时,逗号插入到输入框中,数字的格式不符合要求

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

我正在制作一个输入框,在输入时插入逗号作为千位分隔符(印度货币样式)。它工作得很好。但当我按下backspace键时,它会插入不必要的逗号,而逗号不会被重新排列

例如:当我输入1111111时,我得到的结果是11,11111,但当我按backspace并使其为11,11,11时,它不会被调整

<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>