Foros del Web » Programando para Internet » Javascript »

como puedo recoger un checkbox multiple y validarlo?

Estas en el tema de como puedo recoger un checkbox multiple y validarlo? en el foro de Javascript en Foros del Web. Hola amig@s, ievo más de 2 horas leiendo y probando ejemplos para conseguir una validación que, a priori, puede parecer fácil, pero para mí está ...
  #1 (permalink)  
Antiguo 04/05/2010, 04:49
Avatar de aniMAYtions  
Fecha de Ingreso: diciembre-2007
Ubicación: Granada
Mensajes: 519
Antigüedad: 16 años, 3 meses
Puntos: 2
como puedo recoger un checkbox multiple y validarlo?

Hola amig@s, ievo más de 2 horas leiendo y probando ejemplos para conseguir una validación que, a priori, puede parecer fácil, pero para mí está resultando un infierno.

Uno de los formularios que tengo en mi aplicación ieva una serie de checkbox con múltiple selección. Para eio he creado 2 filas, extraiendo en cada fila los datos de la db(con criterio de límite para que me cuadrasen).

Código PHP:
Ver original
  1. <tr id='modocomunica'>
  2.             <th>Modo de Comunicaci&oacute;n:</th>
  3.             <td><div id='metodos_comunicacion1'>";
  4.                 $conexion = conectar_intranet();
  5.                     $consulta = "Select * From metodos_comunicacion order by id_metodo limit 3";
  6.                     $resultado = mysql_query($consulta, $conexion);
  7.                     mysql_close($conexion);
  8.                     while($fila = mysql_fetch_array($resultado))
  9.                         {
  10.                             echo utf8_encode("<input type='checkbox' name='comunica[]'  value='$fila[0]' />$fila[1]<br/>");
  11.                         }
  12.             echo"</div></td>
  13.             <td>";
  14.                 $conexion = conectar_intranet();
  15.                     $consulta = "Select * From metodos_comunicacion where id_metodo > 3 order by id_metodo";
  16.                     $resultado = mysql_query($consulta, $conexion);
  17.                     mysql_close($conexion);
  18.                     while($fila = mysql_fetch_array($resultado))
  19.                         {
  20.                             echo utf8_encode("<input type='checkbox' name='comunica2[]' value='$fila[0]' />$fila[1]<br/>");
  21.                         }
  22.             echo"</td>
  23.         </tr>

Hasta aquí bien, los puedo recoger con php e insertar los valores en la db. Lo que no consigo es validar si se ha seleccionado algún checkbox o no.

En el evento onSubmit() del formulario mando a la función javascript el mismo formulario
Código PHP:

onSubmit
='javascript: return validaFormDisc(this);' 
Debo decir que el formulario tiene más campos que debo validar, además de los checkbox.

Luego, en javascript he probado de 1000 formas, pero no he conseguido recoger y contabilizar los elementos del array comunica[] para luego poder comprobar si están seleccionados o no, y esa es mi gran duda.

Podeis orientarme?? mil gracias.
  #2 (permalink)  
Antiguo 04/05/2010, 05:12
Avatar de Adler
Colaborador
 
Fecha de Ingreso: diciembre-2006
Mensajes: 4.671
Antigüedad: 17 años, 2 meses
Puntos: 126
Respuesta: como puedo recoger un checkbox multiple y validarlo?

Hola

La función podría ser algo como esto

Código Javascript:
Ver original
  1. function funcion(elem) {
  2. for (var i=0; chk = elem.comunica[i]; i++)
  3. if (chk.checked) return;
  4. alert('Has de selecionar al menos uno');
  5. return false;
  6. }

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;" />
  #3 (permalink)  
Antiguo 04/05/2010, 05:34
Avatar de aniMAYtions  
Fecha de Ingreso: diciembre-2007
Ubicación: Granada
Mensajes: 519
Antigüedad: 16 años, 3 meses
Puntos: 2
Respuesta: como puedo recoger un checkbox multiple y validarlo?

Gracias Adler, pero creo que tampoco funciona. O al menos la modificación que le he hecho para que cuadre. Sigue dejando pasar al siguiente form y no muestra el mensaje en el div.

Código Javascript:
Ver original
  1. function validaFormDisc(formulario)
  2. {
  3.     var valido=0;
  4.     for (var i=0; chk = formulario.comunica[i]; i++)
  5.     {
  6.         if (chk.checked)
  7.             valido += 1;
  8.     }
  9.     if(valido == 0)
  10.     {
  11.             document.getElementById('errorform').innerHTML = 'Debes elegir por lo menos una forma de comunicación para continuar.';
  12.             return false;
  13.     }
  14.     else
  15.     {
  16.         document.getElementById('errorform').innerHTML = '';
  17.         return;
  18.     }
  19. };

Deberia, verdad?? pues no se qué es lo que pasa...
  #4 (permalink)  
Antiguo 05/05/2010, 05:54
Avatar de aniMAYtions  
Fecha de Ingreso: diciembre-2007
Ubicación: Granada
Mensajes: 519
Antigüedad: 16 años, 3 meses
Puntos: 2
Respuesta: como puedo recoger un checkbox multiple y validarlo?

Bueno, probando probando otras soluciones que vi por ahí al final lo he conseguido con la siguiente función
Código Javascript:
Ver original
  1. function validaFormDisc()
  2. {
  3.    
  4.     var valido=0;
  5.  
  6.     var checks1 = document.getElementById('metodos_comunicacion1').getElementsByTagName('INPUT');
  7.     var checks2 = document.getElementById('metodos_comunicacion2').getElementsByTagName('INPUT');
  8.     for (var i=0; i<checks1.length; i++)
  9.     {
  10.         if (checks1[i].checked)
  11.         {
  12.             valido += 1;
  13.         }
  14.     }
  15.     for (var i=0; i<checks2.length; i++)
  16.     {
  17.         if (checks2[i].checked)
  18.         {
  19.             valido += 1;
  20.         }
  21.     }
  22.     if(valido == 0)
  23.     {
  24.             document.getElementById('errorform').innerHTML = 'Debes elegir por lo menos una forma de comunicación para continuar.';
  25.             return false;
  26.     }
  27.     else
  28.     {
  29.         document.getElementById('errorform').innerHTML = '';
  30.         return;
  31.     }
  32. };

Gracias por la aiuda!!

Etiquetas: checkbox, recoger
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 09:47.