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