Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/388.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript-写入时重写数字_Javascript_Jquery - Fatal编程技术网

Javascript-写入时重写数字

Javascript-写入时重写数字,javascript,jquery,Javascript,Jquery,我正在处理一个问题,同时我正在使用jQuery/javascript格式化一个输入字段,该字段可以只存储数字。 其格式为:12345,xy(最大小数位数=2) 要求是,在插入小数部分时,必须覆盖现有xy 换句话说,当我想插入第一个十进制数字(插入符号就在逗号后面)并插入“z”时,数字应该变成12345,zy,而不是像实际那样变成12345,zx 我已经这样试过了: $( "#my_field" ).keyup(function(e) { var comma = $("#my_field"

我正在处理一个问题,同时我正在使用jQuery/javascript格式化一个输入字段,该字段可以只存储数字。 其格式为:12345,xy(最大小数位数=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);
            }
        }

    }); 
$(“#字段”).keydown(函数(e){
变量逗号=$(“#字段”).val().indexOf(',');
var caret=doGetCaretPosition(此);
如果(插入符号>逗号&&((e.keyCode>=49&&e.keyCode=97&&e.keyCode请尝试:


触发
keyup
事件时,旧值已被覆盖。如果需要旧值,可以在
keydown
keypress
事件中查询


这里有一个。

要理解,当你有
12345,xy
时,它变成
12345,zy
。如果我想用t覆盖,它变成
12345,ty
对吗?不,实际上我不能覆盖,所以当我有“12345,xy”时,它变成“12345,zx”,但应该是12345,Zyrd,现在我可以替换数字了,但我有一个奇怪的插入符号行为…当更改第一个十进制数字时,插入符号会出现在字段的末尾。如果我尝试设置插入符号位置,它会难以置信地复制现在按下的数字!知道吗?只是为了精确说明我在这个字段上使用的是自动数字插件插图在小提琴中正常工作,但我可以想象,同一个字段上的另一个按键插件会引起问题。不幸的是,我不熟悉自动通信。请考虑接受我的回答。它解决了你原来的问题。而且似乎你对自动部件没有新的答案。你说得对,它工作正常。t必须修改插件js
var newValue = $("#my_field").val().replace(/x/, "z");

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