我正在处理一个问题,而我正在用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);
}
}
});
有什么想法吗?准确地说,在这个领域我正在使用自动数字插件。
提前致谢
答案 0 :(得分:1)
触发keyup
事件时,旧值已被覆盖。如果您想要旧值,可以在keydown
或keypress
事件中查询。
这是jsfiddle。
答案 1 :(得分:0)
尝试:
var newValue = $("#my_field").val().replace(/x/, "z");
$("#my_field").val(newValue);