Foros del Web » Programando para Internet » Javascript »

Sumar campos con el mismo name

Estas en el tema de Sumar campos con el mismo name en el foro de Javascript en Foros del Web. Tengo un form en el que todos los 5 subtotales tienen name="calcsub" y deseo sumarlos todos y colocarlo dentro de otro campo con id y ...
  #1 (permalink)  
Antiguo 29/03/2011, 02:50
Avatar de SaveSolutions  
Fecha de Ingreso: agosto-2009
Ubicación: El Salvador
Mensajes: 17
Antigüedad: 14 años, 8 meses
Puntos: 0
Sumar campos con el mismo name

Tengo un form en el que todos los 5 subtotales tienen name="calcsub" y deseo sumarlos todos y colocarlo dentro de otro campo con id y name="total".

tengo en mi función:

function sumar(){
var total = document.getElementsByName('calcsub[]');
var total = 0;

for(i=0; i < total.length; i++){
total += parseFloat(total[i].value);
}

document.getElementsByName('calcsub').value = total;
$('#total').val(total);
}

Obtengo 0 pero debería ser una suma superior a cien segun los datos que tengo.

Firebug no me muestra ningún error.

Saludos y muchas gracias por su ayuda.
  #2 (permalink)  
Antiguo 29/03/2011, 04:55
Avatar de Naahuel  
Fecha de Ingreso: marzo-2011
Ubicación: localhost
Mensajes: 796
Antigüedad: 13 años, 1 mes
Puntos: 192
Respuesta: Sumar campos con el mismo name

A ver, el primer error es en las dos primeras líneas:

Código Javascript:
Ver original
  1. var total = document.getElementsByName('calcsub[]');
  2. var total = 0;

O sea tu variable total al principio es un objeto que contiene todos los inputs con name calcsub pero en la siguiente línea es nula :P

Otra cosa que observo es que usás notación de jQuery. Si Firebug no te tira error debe ser que lo estás utilizando. El problema es que sólo lo usás en una sola línea :P

Podrías hacer algo así:
Código HTML:
<script>
function sumar(){
	var totalInp = $('[name="calcsub"]'); 
	var total = 0;

	totalInp.each(function(){
		total += parseFloat($(this).val());
	});
	$('#total').val(total);
}
</script>

<div id="soy-un-div-que-se-desvanece">
	<p><input name="calcsub" /></p>
	<p><input name="calcsub" /></p>
	<p><input name="calcsub" /></p>
	<input id = "total" />
	<a href="#" onclick="sumar(); return false;">Sumar</a>	
</div> 
En ese caso usamos el método de jQuery .each(), que itera entre todos los elementos que obtuvo del selector (todos los inputs con name 'calcsub'). El problema es que parseFloat() retorna NaN para cuando el parámetro es undefined (lo cual es comprensible) que es lo que devuelve .val() si el input está en blanco. Podrías arreglar eso así:
Código Javascript:
Ver original
  1. totalInp.each(function(){
  2.     var valor = $(this).val();
  3.     if(valor == ""){ valor = 0;};
  4.     total += parseFloat(valor);
  5. });

De esta forma podés dejar inputs en blanco y estos valdrán 0.
__________________
nahueljose.com.ar
  #3 (permalink)  
Antiguo 29/03/2011, 11:47
Avatar de SaveSolutions  
Fecha de Ingreso: agosto-2009
Ubicación: El Salvador
Mensajes: 17
Antigüedad: 14 años, 8 meses
Puntos: 0
Respuesta: Sumar campos con el mismo name

Me sale NaN
  #4 (permalink)  
Antiguo 29/03/2011, 11:48
Avatar de Naahuel  
Fecha de Ingreso: marzo-2011
Ubicación: localhost
Mensajes: 796
Antigüedad: 13 años, 1 mes
Puntos: 192
Respuesta: Sumar campos con el mismo name

A ver tu código...
__________________
nahueljose.com.ar
  #5 (permalink)  
Antiguo 29/03/2011, 11:56
Avatar de SaveSolutions  
Fecha de Ingreso: agosto-2009
Ubicación: El Salvador
Mensajes: 17
Antigüedad: 14 años, 8 meses
Puntos: 0
Respuesta: Sumar campos con el mismo name

Sos brillante! Funciona! Estaba escribiendo mal. Aquí te dejo el resultado de tu ayuda, muchísimas gracias.



Quizás faltaría hacer la suma de impuestos mas total y seria un Gran Total, también lo de limitar a dos decimales pero no tengo claro como hacer eso.

Cómo ves, te gusta?

Etiquetas: campos
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 16:06.