Ver Mensaje Individual
  #16 (permalink)  
Antiguo 18/01/2008, 14:19
caberto
 
Fecha de Ingreso: abril-2007
Mensajes: 81
Antigüedad: 17 años, 9 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(nsepMilsepDec) {
if(
sepMil == "."){
    return 
Numbern.replace(/./g,"").replace(/,/g,sepMil) );
    var 
numero Number.value}
else{
    return 
Numbern.replace(/./g,sepDec).replace(/,/g,"") );
    var 
numero Number.value}

function 
formato_HUM(nsepMilsepDecDecimales) {
       
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=1a<=4a++) { 
        
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(fldsepmilsepdece) {
      
    var 
sep 0
    var 
key ''
    var 
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(0leni++) 
     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(; 
leni++) // bucle para darle el primer formato al numero 0,00... 0,02... 0,23... 2,31... 
     
if (strCheck.indexOf(fld.value.charAt(i))!=-1aux += fld.value.charAt(i); 
     
aux += key
     
len aux.length
     if (
len == 0fld.value '';
    if (
len == 1fld.value '0'sepdec '0' aux
    if (
len == 2fld.value '0'sepdec aux
    if (
len 2) { 
    
aux2 ''
     for (
0len 3>= 0i--) { // bucle para darle formato de miles cada tres digitos al numero, 3.222... 32.223... 322.234...
      
if (== 3) { 
       
aux2 += sepmil
       
0
      } 
      
aux2 += aux.charAt(i); 
      
j++; 
     } 
     
fld.value ''
     
len2 aux2.length
     for (
len2 1>= 0i--) //bucle para darle formato de miles y decimales, 32.223,34
     
fld.value += aux2.charAt(i); 
     
fld.value += sepdec aux.substr(len 2len); 
    } 
    
    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>