Javascript - 在写作时覆盖一个数字

时间:2014-11-25 17:24:23

标签: javascript jquery

我正在处理一个问题,而我正在用jQuery / javascript格式化输入字段,可以存储数字。 格式为: 12345,xy (MaxDecimalNumber = 2)

要求是,当我插入小数部分时,我必须覆盖现有的xy。

换句话说,当我想插入第一个十进制数字(插入符号位于逗号后面),并且我插入“z”时,数字应该变为 12345,zy ,而不是12345,实际上是zx。

我已经尝试过这种方式:

$( "#my_field" ).keyup(function(e) {
    var comma = $("#my_field").val().indexOf(',');      
    var value= $("#my_field").val();
    var caret = doGetCaretPosition(this); //get caret position

    //I'm changing the decimal part
    if(caret>comma){
        var oldvalue = value.split(',');
        alert('oldvalue[1]='+oldvalue[1]);//oldvalue[1] already contain the digit pressed and not the old one

       //inserting the first decimal digit
        if(caret == value.length-1){
                var newdigit = String.fromCharCode(e.keyCode);//new digit inserted
                var olddigit = oldvalue[1].charAt(0);//it already has the new one
                var newvalue = value.replace(olddigit, newdigit);
        }
    }
}

但我无法获得旧价值......

有人有任何想法吗?

提前致谢

谢谢Zord,现在我可以替换数字,但我有一个奇怪的插入符号...当更改第一个十进制数字时,插入符号位于字段的末尾。如果我尝试设置插入符号位置,它会立即复制正在按下的数字!

这就是我写的:

    $("#field").keydown(function(e){        
        var comma = $("#field").val().indexOf(',');
        var caret = doGetCaretPosition(this);
        if(caret>comma && ((e.keyCode>=49 && e.keyCode<=57) || (e.keyCode>=97 &&     e.keyCode<=105))){
            var dimDecPart = value.split(',');
            var decPart = dimDecPart[1];
            var lastvalue = decPart.charAt(1);
            var newvalue = "";
            if(caret < $("#field").val().length-1){
                var valinserted = String.fromCharCode(e.keyCode);
                newvalue = value.substring(0,caret)+ valinserted + lastvalue;
                $('#field').autoNumeric('set', newvalue);
                $('#field').caret(comma+1);
            }
        }

    }); 

有什么想法吗?准确地说,在这个领域我正在使用自动数字插件。

提前致谢

2 个答案:

答案 0 :(得分:1)

触发keyup事件时,旧值已被覆盖。如果您想要旧值,可以在keydownkeypress事件中查询。

这是jsfiddle

答案 1 :(得分:0)

尝试:

var newValue = $("#my_field").val().replace(/x/, "z");

$("#my_field").val(newValue);