Ver Mensaje Individual
  #3 (permalink)  
Antiguo 22/07/2007, 19:55
caberto
 
Fecha de Ingreso: abril-2007
Mensajes: 81
Antigüedad: 19 años, 6 meses
Puntos: 0
Re: funcion que simule la tecla tab

derkenuke .... te explico lo que me pasa
estoy usando esta rutina que tome prestada de este foro
se llama "currencyFormat"

Código PHP:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<
html xmlns="http://www.w3.org/1999/xhtml">
<
head>
<
meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<
title>Rutina para sumar Numeros</title>
<
script languaje = "Javascript">
function 
formato_PC(n, sepMil, sepDec) {debugger;
if(
sepMil == "."){
    return 
Number( n.replace(/./g,"").replace(/,/g,sepMil) );
    var 
numero = Number.value}
else{
    return 
Number( n.replace(/./g,sepDec).replace(/,/g,"") );
    var 
numero = Number.value}
} 
function 
formato_HUM(n, sepMil, sepDec, Decimales) {
       
n=n.toFixed(2);//el 2 equivale a la cantidad de decimales que se desee
    
n=String(n).split(".");         
    
n[0]=n[0].split("").reverse().join("");    
        if(
sepMil == "."){ 
               
n[0]=n[0].replace(/(d{3})(?=d)/g,"$1" + sepMil); 
        }else{
            
n[0]=n[0].replace(/(d{3})(?=d)/g,"$1" + sepDec); 
        }
        
n[0]=n[0].split("").reverse().join("");        
        if(
sepMil == "."){
               return 
n.join(",");}
        else{
            
n[0]=n[0].replace(/./g,",");
        return 
n.join(".");}         
        } 
//cuando se realizen los cambios de separadores deben tener el mismo orden 
function suma(arr) { 
    var 
total=0; 
    for(var 
r=0;r<arr.length;r++) 
        
total+=formato_PC(arr[r],document.formulario.Sep_1.value,document.formulario.Sep_2.value); //cambiar aqui el orden de los separadores 
    
return formato_HUM(total,document.formulario.Sep_1.value,document.formulario.Sep_2.value,2); //cambiar aqui el orden de los separadores
}  

function 
sumaTodos() {
  
    var 
arr=new Array(); 
    for(var 
a=1; a<=4; a++) { 
        
arr[arr.length]=document.getElementById("caja"+a).value;//en "caja"+a va el nombre del los campos a sumar
    
}
    
document.getElementById("resultado").value=suma(arr); // "Resultado" es el campo a colocar el resultado de la suma
} 
function 
currencyFormat(fld, milSep, decSep, e) {debugger;
    var 
sep = 0; //variable
    
var key = ''; //variable
    
var i = j = 0; //variable
    
var len = len2 = 0; //variable
    
var strCheck = '0123456789'; //variable
    
var aux = aux2 = ''; //variable
    
var whichCode = (window.Event) ? e.which : e.keyCode; //variable
    
if (whichCode == 13) return true; //Condicional 
    
key = String.fromCharCode(whichCode);  
    if (
strCheck.indexOf(key) == -1) return false;  //Condicional 
    
len = fld.value.length; 
    for(
i = 0; i < len; i++) //
     
if ((fld.value.charAt(i) != '0') && (fld.value.charAt(i) != decSep)) break; //Condicional 
    
aux = ''; 
    for(; 
i < len; i++) 
     if (
strCheck.indexOf(fld.value.charAt(i))!=-1) aux += fld.value.charAt(i); //Condicional 
    
aux += key; 
    
len = aux.length; 
    if (
len == 0) fld.value = ''; //Condicional 
    
if (len == 1) fld.value = '0'+ decSep + '0' + aux; //Condicional 
    
if (len == 2) fld.value = '0'+ decSep + aux; //Condicional 
    
if (len > 2) { //Condicional 
     
aux2 = ''; 
     for (
j = 0, i = len - 3; i >= 0; i--) { 
      if (
j == 3) { //Condicional 
       
aux2 += milSep; 
       
j = 0; 
      } 
      
aux2 += aux.charAt(i); 
      
j++; 
     } 
     
fld.value = ''; 
     
len2 = aux2.length; 
     for (
i = len2 - 1; i >= 0; i--) 
      
fld.value += aux2.charAt(i); 
     
fld.value += decSep + aux.substr(len - 2, len);
    }
    return 
false; 
   } 
      function 
cuenta(){ 
    
document.formulario.Valor.value = document.formulario.Sep_1.value; 
   } 
</script> 
</head> 

<body> 
  <form name="formulario"> 
Sep Miles:<input type ="text" id="Sep_1" size="5" value="," disabled="disabled" />
<br />
Sep Decimales:<input type ="text" id="Sep_2" size="5" value="." disabled="disabled"/>
<br />

Numero<input type="text" id="caja1" size="30" onKeyPress="return(currencyFormat(this,document.formulario.Sep_1.value,document.formulario.Sep_2.value,event))"><br /> 
Numero<input type="text" id="caja2" size="30" onKeyPress="return(currencyFormat(this,document.formulario.Sep_1.value,document.formulario.Sep_2.value,event))"><br /> 
Numero<input type="text" id="caja3" size="30" onKeyPress="return(currencyFormat(this,document.formulario.Sep_1.value,document.formulario.Sep_2.value,event))"><br /> 
Numero<input type="text" id="caja4" size="30" onKeyPress="return(currencyFormat(this,document.formulario.Sep_1.value,document.formulario.Sep_2.value,event))"><br /> 
<input type="button" value="Resultado: " onclick="sumaTodos()" /> <input type="text" id="resultado" size="30"> 
</form>
</body> 
</html> 
la uso para poner separadores de miles y decimales mientras escribo cantidades,
al comenzar la funcion en una variable llamada "whichCode" coloco el keycode de la tecla que he pulsado por lo tanto se si es un numero, si no es un numero la funcion no entra en el proceso de poner los separadores....
el problema es que en netscape(este problema no lo tengo en IE y tampoco en FIREFOX) la tecla TAB e incluso las teclas BACK y INTRO tienen un keycode y la funcion no los toma como numero por lo tanto las invalida, o mejor dicho, no las toma encuenta.

como podria solucionar ese problema por que necesito que funcione la tecla TAB