文本输入框中光标的控制(定位)

来源:互联网 发布:天猫下单软件 编辑:程序博客网 时间:2024/05/05 18:22

前一阵子,项目中有个数字编辑的文本框,每次光标都跑到最后面。客户对此不满意,修改了一下代码。

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">

<html>
<head>
 <title>Untitled</title>
</head>

<body>

<script language="javascript">
function setPos(id,num)
{
document.all[ id ].focus();
var e =document.getElementById(id);
var r =e.createTextRange();
r.moveStart('character',num);
r.collapse(true);
r.select();
}
function removeComma( src ){
 var orgStr = new String( src ) ;
 return orgStr.replace(/[,]/g,"");
}
function removeMinus( src ){
 var orgStr = new String( src ) ;
 return orgStr.replace(/[-]/g,"");
}
function mod(a,b){ 
  var r 
  r=Math.round(a/b)
  if((b*r)>a)  
    r-=1
  return (a-(b*r))
}
function appendDoubleComma( num ){
// alert("Enter---------");
 var srcNumber = new String( num ) ;
 if( num == null || srcNumber.length == 0 ){
  return num ;
 }
 if (srcNumber.substring(0, 1) == '-'){
  srcNumber = '-' + removeMinus(srcNumber);
  var nNum = srcNumber.substring(1);
  return '-' + appendDoubleComma(nNum)
 }
 else
  srcNumber = removeMinus(srcNumber);
// alert("Enter---------1111");
 if (srcNumber == '-')
  return srcNumber;
// if( num == 0 && srcNumber.length>=1 && num.indexOf('.') == -1){
//  return '0' ;
// }
 if (srcNumber.substring(0, 1) == '-'){
  var nNum = srcNumber.substring(1);
  if(nNum.substring(1, 2) == '0' && num.indexOf('.') == -1) {
   return  srcNumber.substring(2);
  }
 }
// else if(srcNumber.substring(0, 1) == '0' && num.indexOf('.') == -1) {
//  return srcNumber.substring(1)
// }
// alert("Enter---------2222");
 var isMinus = false ;
 if( num < 0 ){
  isMinus = true ;
 }
 var pointIndex=0;
 var strValue= removeComma( srcNumber );
 pointIndex=strValue.indexOf(".");
 if(pointIndex==0)
  return parseFloat(strValue);
 if(!(pointIndex>0)){    
  pointIndex=strValue.length;
 } 
// alert("Enter---------3333");
 if( ( isMinus && srcNumber < 3 ) || (!isMinus && srcNumber < 4 ) ){
  return num ;
 }
// alert("Enter---------3344");
 var m = mod(pointIndex,3);
 if (m==0)
  m=3
 else if (isMinus && m==1)
  m=4;
 var newValue="";
// alert("Enter---------4444");
 if (pointIndex>3){ 
  newValue=strValue.substring(0,m)+",";
  len=0;
  if (m==3)
   len=Math.floor((pointIndex)/3)-2
  else if (isMinus && m==4)
   len=Math.floor((pointIndex)/3)-2
  else
   len=Math.floor((pointIndex)/3)-1
  for (i=0;i<len;i++){
   newValue =newValue+strValue.substring(m+i*3,m+(i+1)*3)+",";
  }
  newValue =newValue+strValue.substring(m+(i)*3);
 }else{
  newValue=strValue;
 }
// alert("Enter---------5555");
 return newValue;
}
function editDate(obj){
var pos = ShowCursorPos(obj);
 var e =document.getElementById("text1");
 var value1 = e.value;
// alert(value1);
 value1 = removeComma(value1);
// alert(value1);
 value1 = appendDoubleComma(value1);
// alert(value1);
 e.value = value1;
 setPos(pos);
}
function ShowCursorPos(el) {
 
  if (el.createTextRange) {
    var v = el.value;

    var r = el.createTextRange();
 var s=document.selection.createRange();
 s.setEndPoint("StartToStart",el.createTextRange());
 //var pos = s.text.length;
 document.all.div1.innerHTML = s.text.length;
 return v.length-s.text.length;
// return s.text.length;
  }
 
}
function modifyDouble(obj,event,hiddenname,id,dotnum,maxlength){

var pos = ShowCursorPos(obj);
 if((event.keyCode==37)||(event.keyCode==39))
 return true;
        if((event.keyCode>47&&event.keyCode<58) || (event.keyCode>95&&event.keyCode<106) || event.keyCode==8 || event.keyCode==46 || event.keyCode==189){
 var dummyNumberObj = document.all[ id ] ;

// var realNumberObj = eval('document.middleform.hidden_' + hiddenname) ;

    dummyNumberObj.value=removeComma( dummyNumberObj.value ) ;
    //Added by LvYingna for 0015034 20070129 begin
    if(maxlength==5){
     if(dummyNumberObj.value.indexOf(".")==-1)//Added by LvYingna for 0015134 20070205
     dummyNumberObj.value=dummyNumberObj.value.substring(0,4);
    }
    if(maxlength==8){
     dummyNumberObj.value=dummyNumberObj.value.substring(0,6);
    }
   if(maxlength==10){
    if(dummyNumberObj.value.indexOf(".")==-1)//Added by LvYingna for 0015134 20070205
     dummyNumberObj.value=dummyNumberObj.value.substring(0,8);
    }
    if(maxlength==13){
     dummyNumberObj.value=dummyNumberObj.value.substring(0,10);
    }
    //Added by LvYingna for 0015034 20070129 end
 dummyNumberObj.value =appendDoubleComma( dummyNumberObj.value );
  //Added by LvYingna for 0015134 20070205 begin
  if(maxlength==5){
          dummyNumberObj.value=dummyNumberObj.value.substring(0,5);
     }
     if(maxlength==10){
          dummyNumberObj.value=dummyNumberObj.value.substring(0,10);
          dummyNumberObj.value=removeComma( dummyNumberObj.value );
          dummyNumberObj.value =appendDoubleComma( dummyNumberObj.value );
     }
//     //Added by LvYingna for 0015134 20070205 end
// realNumberObj.value = removeComma( dummyNumberObj.value ) ;
// setCaretToPoint(id,cus);
 }
 var srcValue = document.all[ id ].value
 var decPosition = srcValue.indexOf('.');
 if(decPosition!=-1)
 {
        if(dotnum==1){
             document.all[ id ].value = srcValue.substring(0,decPosition+2)}
        if(dotnum==2){
             document.all[ id ].value = srcValue.substring(0,decPosition+3)}
        if(dotnum==3){
             document.all[ id ].value = srcValue.substring(0,decPosition+4)}
 }
 var length11 = dummyNumberObj.value.length - pos;
  setPos(id,length11);
}

</script>

<input type="text" id="text1" value="1234567890" onkeyup="modifyDouble(this,event,this.name,this.id,2,20)">
</body>
</html>