Foros del Web » Programando para Internet » Javascript »

Problemas con validación de checkbox

Estas en el tema de Problemas con validación de checkbox en el foro de Javascript en Foros del Web. Hola cracks, Tengo un problema con la validación de checkbox en javascript. Necesito mostrar un mensaje de error al usuario si éste no marcó ningún ...
  #1 (permalink)  
Antiguo 06/07/2011, 12:20
 
Fecha de Ingreso: agosto-2009
Mensajes: 216
Antigüedad: 14 años, 8 meses
Puntos: 3
Problemas con validación de checkbox

Hola cracks,

Tengo un problema con la validación de checkbox en javascript.

Necesito mostrar un mensaje de error al usuario si éste no marcó ningún checkbox, mientras que si marcó 1 o más, debo enviar los datos.

Tengo el siguiente código:
Así es como declaro los checkbox:

Código PHP:
echo('<input type="checkbox" id="oferta[]" name="C'.$contador.'" value="C'.$contador.'" />'); 
El javascript es el siguiente:

Código HTML:
<script type="text/javascript"> 

function valida()
{

	inputs = document.getElementById("oferta[]");
	
	for (i=0; i<inputs.length; i++)
	{
    
		if (inputs[i].checked)
    	{
      	
			//return conf();
			return true;
			
		
		}
	
	}
	
	alert("¡No has seleccionado ninguna oferta!");
	return false;
}
Tengo que validar por ID, porque el name de cada checkbox debe ser el que tiene para poder identificar cual eligió más tarde (la lista puede ser desde 1 a infinito).

EDITO: Ahora mismo me salta el alert siempre, a menos que haya seleccionado todos los checkbox, entonces me envía el formulario.

Muchas por anticipado.

Última edición por bienpiyao; 06/07/2011 a las 12:21 Razón: Se me olvidó decir qué me sale.
  #2 (permalink)  
Antiguo 06/07/2011, 12:29
 
Fecha de Ingreso: abril-2011
Mensajes: 1.342
Antigüedad: 13 años
Puntos: 344
Respuesta: Problemas con validación de checkbox

No puedes tener varios elementos con el mismo id y la función getElementById solo te va a devolver un elemento. Tendrás que buscar otra manera de hacerlo, mediante class o name.
  #3 (permalink)  
Antiguo 06/07/2011, 12:31
 
Fecha de Ingreso: agosto-2009
Mensajes: 216
Antigüedad: 14 años, 8 meses
Puntos: 3
Respuesta: Problemas con validación de checkbox

Hola, gracias por tu respuesta.

La verdad es que no sé muy bien como hacerlo, así que lo que me has dicho me suena a chino :(. Me podrías echar una manilla?

Gracias por anticipado.
  #4 (permalink)  
Antiguo 06/07/2011, 12:46
 
Fecha de Ingreso: abril-2011
Mensajes: 1.342
Antigüedad: 13 años
Puntos: 344
Respuesta: Problemas con validación de checkbox

Lo mejor es utilizar el atributo name:

Código PHP:
Ver original
  1. echo('<input type="checkbox" name="oferta[]" value="C'.$contador.'" />');

Código Javascript:
Ver original
  1. function valida()
  2. {
  3.  
  4.     inputs = document.getElementsByName("oferta[]");
  5.    
  6.     for (i=0; i<inputs.length; i++)
  7.     {
  8.    
  9.         if (inputs[i].checked)
  10.         {
  11.        
  12.             //return conf();
  13.             return true;
  14.            
  15.        
  16.         }
  17.    
  18.     }
  19.    
  20.     alert("¡No has seleccionado ninguna oferta!");
  21.     return false;
  22. }
  #5 (permalink)  
Antiguo 06/07/2011, 12:50
 
Fecha de Ingreso: agosto-2009
Mensajes: 216
Antigüedad: 14 años, 8 meses
Puntos: 3
Respuesta: Problemas con validación de checkbox

Hola de nuevo,

Gracias por tu código, con esa función funciona perfectamente la validación, pero sin embargo, no recoge bien los datos del formulario, es decir, no hace nada. Al cambiar el nombre de name, ya no funciona. :S... Era por eso por lo que no quería cambiar el atributo name...no hay ninguna otra forma de hacerlo?

Gracias!
  #6 (permalink)  
Antiguo 06/07/2011, 12:54
 
Fecha de Ingreso: abril-2011
Mensajes: 1.342
Antigüedad: 13 años
Puntos: 344
Respuesta: Problemas con validación de checkbox

Si los checkboxs están relacionados deberían tener el mismo name y luego en el servidor por el valor puedes comprobar cuales han sido pinchados y cuales no.
  #7 (permalink)  
Antiguo 06/07/2011, 12:59
 
Fecha de Ingreso: agosto-2009
Mensajes: 216
Antigüedad: 14 años, 8 meses
Puntos: 3
Respuesta: Problemas con validación de checkbox

Bueno, lo que hago es lo siguiente:

Para definir el checkbox hago:

Código PHP:
$contador 0;

/*Aquí tengo el while incrementando el contador*/

echo('<input type="checkbox" name="C'.$contador.'" value="C'.$contador.'" />'); 
Y esto va donde recojo los datos. La consulta a la bd es la misma en ambos sitios, obviamente.

Código PHP:
$contador 0;

/*Aqui tengo un while incrementando el contador*/

$indicador 'C'.$contador;
                
        if( isset( 
$_POST[$indicador] ) )
        {
            
                    echo 
$_POST[$indicador];


si pongo name = ofertas[], me da error de index. Si lo pongo como lo tengo arriba, me funciona bien, pero claro, la validación no la hace...qué estoy haciendo mal?

Muchas gracias por tu tiempo.
  #8 (permalink)  
Antiguo 06/07/2011, 13:03
Avatar de Panino5001
Me alejo de Omelas
 
Fecha de Ingreso: mayo-2004
Ubicación: -34.637167,-58.462984
Mensajes: 5.148
Antigüedad: 20 años
Puntos: 834
Respuesta: Problemas con validación de checkbox

Cita:
Iniciado por bienpiyao Ver Mensaje
Hola de nuevo,

Gracias por tu código, con esa función funciona perfectamente la validación, pero sin embargo, no recoge bien los datos del formulario, es decir, no hace nada. Al cambiar el nombre de name, ya no funciona. :S... Era por eso por lo que no quería cambiar el atributo name...no hay ninguna otra forma de hacerlo?

Gracias!
Pasa que cuando tienen un corchete al final, al servidor llegan como array.
Como estás en php podés verlo con
Código PHP:
print_r($_REQUEST); 
  #9 (permalink)  
Antiguo 06/07/2011, 13:06
 
Fecha de Ingreso: agosto-2009
Mensajes: 216
Antigüedad: 14 años, 8 meses
Puntos: 3
Respuesta: Problemas con validación de checkbox

Hola Panino5001,

Gracias por tu respuesta, si yo cambio la línea del echo por la que me diste, no imprime nada :S.

Tan sólo hice esto:

Código PHP:
$indicador 'C'.$contador;
                
        if( isset( 
$_POST[$indicador] ) )
        {
            
                    
print_f($_REQUEST);


Es la primera vez que uso $_REQUEST y quizás haya hecho una barbaridad :S.

Gracias!
  #10 (permalink)  
Antiguo 06/07/2011, 13:07
Avatar de Panino5001
Me alejo de Omelas
 
Fecha de Ingreso: mayo-2004
Ubicación: -34.637167,-58.462984
Mensajes: 5.148
Antigüedad: 20 años
Puntos: 834
Respuesta: Problemas con validación de checkbox

es print_r (lo escribí mal y lo corregí, pero llegué tarde).
  #11 (permalink)  
Antiguo 06/07/2011, 13:09
 
Fecha de Ingreso: agosto-2009
Mensajes: 216
Antigüedad: 14 años, 8 meses
Puntos: 3
Respuesta: Problemas con validación de checkbox

Sigue sin imprimir nada por que no entra en el if. Debo cambiar el $_POST del if por $_REQUEST?

Gracias!
  #12 (permalink)  
Antiguo 06/07/2011, 13:14
Avatar de Panino5001
Me alejo de Omelas
 
Fecha de Ingreso: mayo-2004
Ubicación: -34.637167,-58.462984
Mensajes: 5.148
Antigüedad: 20 años
Puntos: 834
Respuesta: Problemas con validación de checkbox

Chequéa uno o varios y hacé click en el botón:
Código PHP:
<?php
if(isset($_POST['button'])){
    echo 
'<pre>';
    
print_r($_POST);
    echo 
'<pre>';
    exit;
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Documento sin título</title>
</head>

<body>
<form action="<?php echo $_SERVER['PHP_SELF'?>" method="post">
  <input name="name[]" type="checkbox" value="a" />
<input name="name[]" type="checkbox" value="b" />
<input name="name[]" type="checkbox" value="c" />
<label>
  <input type="submit" name="button" id="button" value="Enviar" />
</label>
</form>
</body>
</html>
Había puesto $_REQUEST porque desconocía el method de tu form
  #13 (permalink)  
Antiguo 06/07/2011, 13:22
 
Fecha de Ingreso: abril-2011
Mensajes: 1.342
Antigüedad: 13 años
Puntos: 344
Respuesta: Problemas con validación de checkbox

La idea es usar el valor del elemento, no la clave.

Revisa el html porque tienes que cambiar cosas para que funciones bien la validación.

Código HTML:
Ver original
  1. <script type="text/javascript">
  2. function valida()
  3. {
  4.  
  5.     inputs = document.getElementsByName("oferta[]");
  6.    
  7.     for (i=0; i<inputs.length; i++)
  8.    {
  9.    
  10.        if (inputs[i].checked)
  11.        {        
  12.    
  13.            return true;
  14.            
  15.        
  16.        }
  17.    
  18.    }
  19.    
  20.    alert("¡No has seleccionado ninguna oferta!");
  21.    return false;
  22. }
  23. </head>
  24. <form action="parametros.php" method="post" onsubmit="return valida()">
  25.  
  26. <input type="checkbox" name="oferta[]" value="C1" />
  27. <input type="checkbox" name="oferta[]" value="C2" />
  28. <input type="checkbox" name="oferta[]" value="C3" />
  29.  
  30. <input type="submit"  />
  31.  
  32. </form>
  33. </body>
  34. </html>

Un ejemplo de como podrías hacer la validación, luego puedes meterlo si quieres en un bucle.

Código PHP:
Ver original
  1. <?php
  2.  
  3.  
  4. if (isset($_POST['oferta'])){
  5.  
  6. if (in_array("C1",$_POST['oferta'],true))
  7.  echo "C1 está en el array";
  8.  
  9.  
  10. }  
  11.  
  12. ?>
  #14 (permalink)  
Antiguo 06/07/2011, 13:40
 
Fecha de Ingreso: agosto-2009
Mensajes: 216
Antigüedad: 14 años, 8 meses
Puntos: 3
Respuesta: Problemas con validación de checkbox

Ey cracks, ya lo solucioné!

Qué torpe! Al final hice esto:

Código PHP:
 <input type="checkbox" name="oferta[]" id="oferta[]" value="<?php echo $row1["id"];?>" />
Y para recoger los datos:

Código PHP:
$ofertas $_POST["oferta"];
            
    
$n count($ofertas);
    
    for(
$i=0;$i<$n;$i++)
    {
            
        echo 
$ofertas[$i];
            
    } 
Era super-sencillo, no sé como me pude complicar tanto.

Gracias por vuestra ayuda, pues me distéis la pista :P.

Un saludo!

Etiquetas: checkbox, validar
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 05:45.