Foros del Web » Programando para Internet » Javascript »

Validar Checkbox en un solo FORM?

Estas en el tema de Validar Checkbox en un solo FORM? en el foro de Javascript en Foros del Web. Saludos a todos! Tengo un problema que ya me revienta la cabeza hace rato!. Necesito chequear (validar) a través de Javascript 2 listados de checkbox, ...
  #1 (permalink)  
Antiguo 15/09/2008, 18:29
 
Fecha de Ingreso: agosto-2008
Mensajes: 13
Antigüedad: 15 años, 8 meses
Puntos: 0
Pregunta Validar Checkbox en un solo FORM?

Saludos a todos!

Tengo un problema que ya me revienta la cabeza hace rato!.

Necesito chequear (validar) a través de Javascript 2 listados de checkbox, donde necesito "obligar" a la persona haga checked en por lo menos algún checkbox de cada listado (es la gracia).

Pero el problema me surge cuando ingreso 2 códigos con .elements, el primer listado me lo valida bien, y el otro nada de nada!.

Este es el código.

Listado 1
<form name="formmsg" action="xxx.html" method="post">
<input type="checkbox" name="hijos[]" value="1" > 1<br>
<input type="checkbox" name="hijos[]" value="2" > 2<br>
<input type="checkbox" name="hijos[]" value="3" > 3<br>
<input type="checkbox" name="hijos[]" value="4" > 4<br>
<br>
<br>
Listado 2
<input type="checkbox" name="edad[]" value="1" > 1<br>
<input type="checkbox" name="edad[]" value="2" > 2<br>
<input type="checkbox" name="edad[]" value="3" > 3<br>
<input type="checkbox" name="edad[]" value="4" > 4<br>
<img src="images/boton.gif" onclick="validaFilterMsg();">
</form>

===========================
CÓDIGO JAVASCRIPT!

var cont=0;
for(i=0; cnt=document.formmsg.elements[i]; i++) {
if (cnt.type=='checkbox')
if (cnt.checked) {
cont++;
break;
}
}



if (cont==0) {
alert('Debes seleccionar tus hijos');
window.document.formmsg.hijos.focus();
return;
}


==========================

Como explique anteriormente, el LISTADO 1 me lo valida bien, pero necesito agregar una nueva validación para el LISTADO 2, que está dentro del mismo formulario =S, cambie los nombres de las variables, pero tampoco resultó.

Espero su gran ayuda!

  #2 (permalink)  
Antiguo 16/09/2008, 07:03
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
De acuerdo Respuesta: Validar Checkbox en un solo FORM?

Puedes tener una función que valide por el grupo de checks:
Código javascript:
Ver original
  1. function validagroup(check) {
  2. for (i=0; i<check.length; i++) {
  3.     if (check[i].checked) { return true; }
  4. }
  5. return false;
  6. }
Esa función devolverá un boolean (verdadero o falso) si uno de los checks está marcado o si ninguno lo está. En ese caso habrá que llamarlo usando el nombre de los checks, pero habrá que quitarle los corchetes, que de hecho no veo que hagan falta.
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #3 (permalink)  
Antiguo 16/09/2008, 07:52
Avatar de Adler
Colaborador
 
Fecha de Ingreso: diciembre-2006
Mensajes: 4.671
Antigüedad: 17 años, 4 meses
Puntos: 126
Respuesta: Validar Checkbox en un solo FORM?

Hola

También puedes probar así. Ya que si te he entendido quieres en ambos grupos de checkbox se marque uno
Cita:
<form name="formmsg" action="xxx.html" method="post" onsubmit="return validaGrupo();">
<div id="listado1">
<input type="checkbox" name="hijos[]" value="1" > 1<br>
<input type="checkbox" name="hijos[]" value="2" > 2<br>
<input type="checkbox" name="hijos[]" value="3" > 3<br>
<input type="checkbox" name="hijos[]" value="4" > 4<br>
</div>
<br>
<br>
<div id="listado2">
<input type="checkbox" name="edad[]" value="1" > 1<br>
<input type="checkbox" name="edad[]" value="2" > 2<br>
<input type="checkbox" name="edad[]" value="3" > 3<br>
<input type="checkbox" name="edad[]" value="4" > 4<br>
</div>
<input type="submit" value="Enviar" />
</form>
Código javascript:
Ver original
  1. <script type="text/javascript">
  2. var lista1 = document.getElementById("listado1").getElementsByTagName("INPUT");
  3. var lista2 = document.getElementById("listado2").getElementsByTagName("INPUT");
  4. function validaGrupo () {
  5. for (var i=0; i<lista1.length; i++)
  6.     if (!lista1[i].checked) {
  7.      alert('Has de selecionar al menos uno 1');
  8.       return false;
  9. }
  10. else
  11. {
  12.  
  13. for (var i=0; i<lista1.length; i++)
  14.     if (!lista2[i].checked) {
  15.      alert('Has de selecionar al menos uno 2');
  16.       return false;
  17. }
  18. else
  19. {
  20. return true;
  21. }
  22. }
  23. }
  24. </script>

Suerte
__________________
Los formularios se envían/validan con un botón Submit
<input type="submit" value="Enviar" style="background-color:#0B5795; font:bold 10px verdana; color:#FFF;" />
  #4 (permalink)  
Antiguo 16/09/2008, 08:07
 
Fecha de Ingreso: agosto-2008
Mensajes: 13
Antigüedad: 15 años, 8 meses
Puntos: 0
Respuesta: Validar Checkbox en un solo FORM?

Gracias por las respuestas y su tiempo ;)

Probé los códigos, pero no funcionaron, de hecho los probé tal como están posteados =S ...

Los listados son independientes uno del otro. Por lo tanto se tiene que validar el listado 1 primero si está checkeado, y luego también validar el listado2 para ver si está chequeado.

El tema de los name con [] tiene que ser así, ya que estos datos los guardo separados por comas en una base de datos, entonces tiene que saber validarlos con [].

Lo otro, es que la gracia que la validación este dentro de una sola función ya que además valido muchos campos más dentro de un sólo FORM. Es un registro de personas.

Alguna otra ayuda amigos? :(
  #5 (permalink)  
Antiguo 16/09/2008, 08:16
Avatar de Adler
Colaborador
 
Fecha de Ingreso: diciembre-2006
Mensajes: 4.671
Antigüedad: 17 años, 4 meses
Puntos: 126
Respuesta: Validar Checkbox en un solo FORM?

Hola

Cita:
Iniciado por sdominguez Ver Mensaje
Los listados son independientes uno del otro. Por lo tanto se tiene que validar el listado 1 primero si está checkeado, y luego también validar el listado2 para ver si está chequeado.
Acabo de probarlo otra vez, y el código realiza exactamente lo que estás diciendo

Suerte
__________________
Los formularios se envían/validan con un botón Submit
<input type="submit" value="Enviar" style="background-color:#0B5795; font:bold 10px verdana; color:#FFF;" />
  #6 (permalink)  
Antiguo 16/09/2008, 08:21
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
De acuerdo Respuesta: Validar Checkbox en un solo FORM?

La solución de Adler es interesante, aunque habrá que corregirle algunas cosas, ya que al encontrarse con un checkbox que no está seleccionado automáticamente devuelve false cuando en realidad debería recorrer todos los checkbox para saber si alguno de ellos está marcado. Por ejemplo:
Código javascript:
Ver original
  1. function validar() {
  2.       var lista1 = document.getElementById("listado1").getElementsByTagName("INPUT");
  3.       var lista2 = document.getElementById("listado2").getElementsByTagName("INPUT");
  4.  
  5.       fGroup = groupCheck(lista1);
  6.       if (!fGroup) { return false; }
  7.       fGroup = groupCheck(lista2);
  8.       if (!fGroup) { return false; }
  9.  
  10.       return true;
  11. }
  12. function groupCheck(group) {
  13.       selected = false;
  14.       for (var i=0; i<group.length; i++) {
  15.           if (group[i].checked) {
  16.               selected = true; break; }
  17.       }
  18.       if (!selected) {
  19.           alert("Debes seleccionar uno");
  20.           return false;
  21.       }
  22.       return true;
  23. }
Solo necesitarás agregarle las demás validaciones dentro de la función validar.
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #7 (permalink)  
Antiguo 16/09/2008, 12:51
Avatar de Adler
Colaborador
 
Fecha de Ingreso: diciembre-2006
Mensajes: 4.671
Antigüedad: 17 años, 4 meses
Puntos: 126
Respuesta: Validar Checkbox en un solo FORM?

Buena, David el Grande . Lo probé únicamente con el primer checkbox de cada grupo
__________________
Los formularios se envían/validan con un botón Submit
<input type="submit" value="Enviar" style="background-color:#0B5795; font:bold 10px verdana; color:#FFF;" />
  #8 (permalink)  
Antiguo 16/09/2008, 15:33
 
Fecha de Ingreso: agosto-2008
Mensajes: 13
Antigüedad: 15 años, 8 meses
Puntos: 0
Respuesta: Validar Checkbox en un solo FORM?

Gracias David el Grande!! =D

He probado nuevamente el código y ahora sí funciona, gracias por la corrección!, es exactamente lo que quería.

También muchas gracias a Adler por la idea principal.

Me han sacado un gran peso de encima!!

=D
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 04:53.