Ver Mensaje Individual
  #16 (permalink)  
Antiguo 18/01/2008, 14:19
caberto
 
Fecha de Ingreso: abril-2007
Mensajes: 81
Antigüedad: 19 años, 6 meses
Puntos: 0
Re: Sumar valores de campos en formulario

saludos...
aqui estan unas rutinas que me fueron facilitadas en este foro y que le hice algunas modicicaciones para usarlas segun era mi caso en ella podras escribir numeros son separadores de miles y decimales y sumarlos....

saludos....
espero te sirvan de ayuda
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">
<!--

document.write("<b>Browser: </b> " + navigator.appName);
document.write ("<br><b>Versión: </b>" + navigator.appVersion);
document.write ("<br><b>Lenguaje: </b>" + navigator.language);

//-->
function formato_PC(n, sepMil, sepDec) {
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(Decimales);//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
} 
/*--------funcion que genera los separadores de miles y decimales mientras se escribe----------*/
    
function currencyFormat(fld, sepmil, sepdec, e) {
      
    var 
sep = 0; 
    var 
key = ''; 
    var 
i = j = 0; 
    var 
len = len2 = 0; 
    var 
strCheck = '0123456789'; 
    var 
aux = aux2 = ''; 
    var 
whichCode = (window.Event) ? e.which : e.keyCode; // damos a whichCode el valor keycode de la tecla que ha sido pulsada
    
if (whichCode == 13 || whichCode == 0) return true; // validamos la tecla enter
    
key = String.fromCharCode(whichCode); // obtiene la tecla que ha sido pulsada de acuerdo a su keycode 
    
if (strCheck.indexOf(key) == -1) return false; // invalidamos las teclas que no seas numericas 
    
len = fld.value.length; // damos a len el largo de la parametro que hemos recibido
    
for(i = 0; i < len; i++) 
     if ((
fld.value.charAt(i) != '0') && (fld.value.charAt(i) != sepdec)) break; // si se cumplen las condiciones 'fld.value.charAt(i)' es cero y el valor de sepdec
    
aux = '';
    for(; 
i < len; i++) // bucle para darle el primer formato al numero 0,00... 0,02... 0,23... 2,31... 
     
if (strCheck.indexOf(fld.value.charAt(i))!=-1) aux += fld.value.charAt(i); 
     
aux += key; 
     
len = aux.length; 
     if (
len == 0) fld.value = '';
    if (
len == 1) fld.value = '0'+ sepdec + '0' + aux; 
    if (
len == 2) fld.value = '0'+ sepdec + aux; 
    if (
len > 2) { 
    
aux2 = ''; 
     for (
j = 0, i = len - 3; i >= 0; i--) { // bucle para darle formato de miles cada tres digitos al numero, 3.222... 32.223... 322.234...
      
if (j == 3) { 
       
aux2 += sepmil; 
       
j = 0; 
      } 
      
aux2 += aux.charAt(i); 
      
j++; 
     } 
     
fld.value = ''; 
     
len2 = aux2.length; 
     for (
i = len2 - 1; i >= 0; i--) //bucle para darle formato de miles y decimales, 32.223,34
     
fld.value += aux2.charAt(i); 
     
fld.value += sepdec + 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>