Si te he de ser sincero me encanta que me diagas esto. Con lo que me gusta enrollarme!!
Perdona que no te lo explicara antes pero estaba un poco liado.
La función lo que hace es recorrer los campos del formulario y va sumando los valores de los mismos para poner al final el resultado en el campo del total. La función se dispara cada vez que el puntero está en un campo del formulario y se suelta una tecla pulsada con anterioridad.
Ahora vamos por partes.
Los campos del formulario.
Estos campos no ofrecen dificultad: Código PHP:
<input type="text" name="numero2" onkeyup=sumar()>
Como ves está el onkeyup que dispara la función sumar() que es la encargada de realizar la suma. Por lo que cuando se suelta una tecla del teclado ejecuta la función. Javascript maneja otros eventos como onchange, onkeydown, onkeypress, onmousemove, onmouseover, onmouseout, onclick, ondoubleclick... Para este ejemplo entiendo que el mejor es onkeyup.
La función
Primero inicializamos a cero la variable total que va a ser la que nos sirva para almacenar la suma de todos los campos.
JS hace un Array con todos los formularios de una página y dentro de cada formulario un Array con todos sus elementos.
Así que para recorrer los 3 primeros elementos del formulario hacemos un FOR Código PHP:
for (a=0;a<3;a++){
y rescatamos su valor. Has de tener en cuenta que JS empieza a contar por el cero, así el primer elemento será el cero, luego el uno...
Así para comprobar el valor de uno determinado sólo tenemos que decirle que mire en el documento (document) dentro del primer formulario (forms[0]) el valor introducido del elemento "a" (elements[a].value) siendo a la variable del FOR que (obviamente) primero será 0, luego 1 y luego 2. Sería más o menos así: Código PHP:
document.forms[0].elements[0].value
document.forms[0].elements[1].value
document.forms[0].elements[2].value
Ahora que sabemos como rescatar el valor
lo que vamos a hacer primero es comprobar si el dato introducido tiene comas. En España es habitual separar los enteros de los decimales con comas, pero JS al ser un "invento" anglosajón separa los decimales con puntos. Así para que si le metemos comas los interprete como puntos le decimos que separe el valor del campo del formulario por las comas y que lo una con puntos (este truco es de caricatos):
Código PHP:
document.forms[0].elements[a].value=document.forms[0].elements[a].value.split(",").join(".");
una vez que no tenemos comas en nuestro campo tenemos que comprobar si realmetne es un número y para eso se emplea la función isNaN que devuelve true si no es un número. Así aquí le estamos diciendo que si es un número (si no es un no número)que siga y si no lo es que cambie su valor por cero. Código PHP:
if (!isNaN(document.forms[0].elements[a].value)){
y Código PHP:
else{document.forms[0].elements[a].value=0
Vale, pues ya tenemos un número en formato anglosajón. Lo que nos queda es que lo tome como número y no como una cadena de texto (me vas a perdonar pero siempre uso una variable pepe):
Código PHP:
pepe=new Number(document.forms[0].elements[a].value);
Y lo sume al total: Código PHP:
total=total+pepe;
Esto lo hace con cada uno de los tres campos. Por último, cuando termina el bucle el resultado de la suma se lo da como valor al campo donde debe estar el total: Código PHP:
document.forms[0].elements["total"].value=total
Y esta función, como ya he dicho se dispara cada vez que sueltes una tecla estando el foco en uno de los campos del formulario.
Espero que me haya sabido explicar con la suficiente claridad. Si tienes más dudas por favor pregunta!!