Foros del Web » Programando para Internet » Javascript »

problemas con checkbox

Estas en el tema de problemas con checkbox en el foro de Javascript en Foros del Web. hola tengo poco tiempo trabajando con javascrpit y tengo una duda muy grande tengo 4 checkboxs y necesito que el usuario seleccione uno, dos, tres ...
  #1 (permalink)  
Antiguo 13/03/2005, 17:26
 
Fecha de Ingreso: marzo-2005
Mensajes: 2
Antigüedad: 19 años, 8 meses
Puntos: 0
Pregunta problemas con checkbox

hola tengo poco tiempo trabajando con javascrpit y tengo una duda muy grande tengo 4 checkboxs y necesito que el usuario seleccione uno, dos, tres o los cuatro checkboxs, que se sumen los checkbox seleccionados y que abajo de estos exista un boton submit que al dar click se muestre el total de las cantidades asignadas en un input type="text" es una simple suma pero ya me atore.

esta es la estructura

[ ] lavadora 100
[ ] plancha 200
[ ] licuadora 300
[ ] extractor 400

[calcular_total]
[ resultado]

ojala me puedan asesorar!
  #2 (permalink)  
Antiguo 13/03/2005, 18:14
Avatar de renton  
Fecha de Ingreso: enero-2004
Ubicación: BCN (PPCC)
Mensajes: 573
Antigüedad: 20 años, 9 meses
Puntos: 1
Explicación:

1.Creas un campo Hidden llamado x ejemplo "txtTotal" inicializado a 0.
2.En cada checkbox pones como parametro "value" el numero que quieres que se sume y en onClick llamas a una funcion rollo "calculaTotal(this)" donde "this" se refiere al objeto en si, en este caso al checkbox clickado.
3. Declaras la funcion calculaTotal pasandole el this con el nombre por ejemplo "elCheck".
3. Haces un if. si elCheck (osea el checkbox que llama a la funcion) ha sido checkeado, que el valor de txtTotal sea igual a su valor mas el del checkbox clickado.En caso contrario,osea si lo has desactivado, que se lo reste.
4. Y voilà!, al hacer submit automaticamente se envia el campo hidden con el resultado de la suma.

Código:
Código:
<html>
<head>
<title>Documento sin t&iacute;tulo</title>
<script language="javascript">
	function calculaTotales(elCheck){
		if (elCheck.checked==true) {
			frm1.txtTotales.value=parseInt(frm1.txtTotales.value)+parseInt(elCheck.value);
		}else{
			frm1.txtTotales.value=parseInt(frm1.txtTotales.value)-parseInt(elCheck.value);
		}
	}
</script>
</head>

<body>
<form name="frm1" action="pagina2.htm" method="post">
<input type="hidden" name="txtTotales" value="0">
<input type="checkbox" name="chk1" value="1" onClick="calculaTotales(this)">1
<input type="checkbox" name="chk2" value="2" onClick="calculaTotales(this)">2
<input type="checkbox" name="chk3" value="3" onClick="calculaTotales(this)">3
<input type="checkbox" name="chk4" value="4" onClick="calculaTotales(this)">4
<input type="submit" value="Envia!">

</form>

</body>
</html>
Bueno, creo que está bastante completito, eh!
Como habrás imaginado hoy staba un poco aburrido, jeje!
Venga un saludo!!
__________________
"No et limites a contemplar aquestes hores que ara venen, baixa al carrer i participa.
No podran res davant un poble unit, alegre i combatiu!!"
  #3 (permalink)  
Antiguo 13/03/2005, 18:56
 
Fecha de Ingreso: marzo-2005
Mensajes: 2
Antigüedad: 19 años, 8 meses
Puntos: 0
muchas graciaas renton me sorprende tu experiencia saludos!!!!!!!
  #4 (permalink)  
Antiguo 13/03/2005, 19:01
 
Fecha de Ingreso: febrero-2004
Mensajes: 221
Antigüedad: 20 años, 9 meses
Puntos: 0
Algunas correciones a ese codigo.

En primer lugar, a la funcion que va a sumar, no le debes pasar una referencia al objeto (this) si no el valor a sumar. Esto incrementa la reusabilidad ya que le estamos pasando directamente un numero.

En segundo lugar,
<script language="javascript">

es un invento chino. Lo correcto es poner:
Código HTML:
<script type="text/javascript">
//...
</script> 
En tercer lugar, para incrementar la velocidad y performance, yo no estaria modificando constantemente el hidden, si no que modificaria una variable, y luego en el evento onsubmit del form llenaria el input type hidden.

Ejemplo:

<form ... onsubmit="document.getElementById('asd').value = globalvariable;">
  #5 (permalink)  
Antiguo 14/03/2005, 04:50
Avatar de renton  
Fecha de Ingreso: enero-2004
Ubicación: BCN (PPCC)
Mensajes: 573
Antigüedad: 20 años, 9 meses
Puntos: 1
Pos supuesto que hay formas mejores, pero sin duda me pareció la mejor forma de explicar didacticamente cómo hacerlo.

En 1º lugar xq una persona q lleva poco con Javascript a lo mejor no tiene ni puñetera idea de lo q es el "getElementByid", o se la pela q en vez de "javascript" ponga "text/javascript" (realmente para el caso no hay ninguna diferencia).
Además considero que pasarle es "this" es la forma más optima, ya que solo con eso puedes verificar el checked y a la vez recojer su valor. (y si introduces nuevos checkboxes no hay q modificar la funcion).
Ah y lo de velociad y performance.... joer tio que es un javascript! No me digas que va a ir mas rapido por meterlo en una variable global que por hacerlo en el hidden directamente! Que irá? 0,0001 segundos + rapido?? ;)

Venga un saludo!
__________________
"No et limites a contemplar aquestes hores que ara venen, baixa al carrer i participa.
No podran res davant un poble unit, alegre i combatiu!!"
  #6 (permalink)  
Antiguo 14/03/2005, 11:42
 
Fecha de Ingreso: febrero-2004
Mensajes: 221
Antigüedad: 20 años, 9 meses
Puntos: 0
Si, no estaba criticando tu forma, solo le estaba agregando algunas mejoras.
Con respecto a lo de la velocidad, me temo que siempre hay que tratar de optimizarlo hasta en lo mas pequeño, puesto que es codigo que se va a ejecutar en la maquina cliente de la que desconocemos sus capacidades.

Saludos
  #7 (permalink)  
Antiguo 14/03/2005, 11:50
Avatar de renton  
Fecha de Ingreso: enero-2004
Ubicación: BCN (PPCC)
Mensajes: 573
Antigüedad: 20 años, 9 meses
Puntos: 1
Ya lo se hombre! :)
Siempre es bueno saber otras opiniones y otras formas de programar!
Un saludoOoO!!
__________________
"No et limites a contemplar aquestes hores que ara venen, baixa al carrer i participa.
No podran res davant un poble unit, alegre i combatiu!!"

Última edición por renton; 14/03/2005 a las 12:04
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 18:47.