Foros del Web » Programando para Internet » Javascript »

arreglo de checkbox y su validacion

Estas en el tema de arreglo de checkbox y su validacion en el foro de Javascript en Foros del Web. Buenos dias a todos, espero que alguien me pueda ayudar con un problema que tengo primero que todo mi ejemplo es un arbol de datos ...
  #1 (permalink)  
Antiguo 05/03/2009, 07:02
 
Fecha de Ingreso: enero-2009
Mensajes: 10
Antigüedad: 15 años, 3 meses
Puntos: 0
arreglo de checkbox y su validacion

Buenos dias a todos, espero que alguien me pueda ayudar con un problema que tengo
primero que todo mi ejemplo es un arbol de datos

ejemplo marca de auto y dentro de el sus modelos, cada uno de estos lleva un checkbox que luego de tiquear son guardados en una cadena denuevo a la bd, el problema que tengo es que necesito validar esos checkbox, me explico si selecciono uno o varios modelos de vehiculo automaticamente me chequee la marca de esos modelos nada mas

algo asi
<SCRIPT LANGUAJE="javascript">
function tildar(form) {
if(form.nombre_modelo.checked == true) {
form.nombre_marca.checked = true;

}
else {
form.nombre_modelo.checked = false;
form.nombre_marca.checked = false;

}
}
</script>
<input type='checkbox' value='$id_marca onClick='seleccionar(this.document)' name='nombre_marca[]' ";

<input type='checkbox' value='$id_modelo name='nombre_modelo []' ";

foreach($consulta->result() as $resultado):

<input type='checkbox' value='$id_modelo name='nombre_modelo []' ";
<input type='checkbox' value='$id_modelo name='nombre_modelo []' ";

endforeach;

esto funciona si los checkbox no estan en un arreglo, pero yo los necesito con arreglo,
espero que alguien me pueda ayudar
de antemano muca gracias
  #2 (permalink)  
Antiguo 05/03/2009, 07:07
okram
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: arreglo de checkbox y su validacion

Tu pregunta tiene que ver con validar con php o con javascript?

  #3 (permalink)  
Antiguo 05/03/2009, 07:53
 
Fecha de Ingreso: enero-2009
Mensajes: 10
Antigüedad: 15 años, 3 meses
Puntos: 0
Respuesta: arreglo de checkbox y su validacion

mmm creo que javascript me equivoque de seccion
se puede mover?? para nohacer otro
  #4 (permalink)  
Antiguo 05/03/2009, 08:55
okram
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: arreglo de checkbox y su validacion

He reportado tu mensaje para que un moderador lo mueva. Recuerda que puedes reportar mensajes usando el ícono en la barra lateral izquierda de cada mensaje.

  #5 (permalink)  
Antiguo 05/03/2009, 09:25
Avatar de jpinedo
Colaborador
 
Fecha de Ingreso: septiembre-2003
Ubicación: Lima, Perú
Mensajes: 3.120
Antigüedad: 20 años, 7 meses
Puntos: 41
Respuesta: arreglo de checkbox y su validacion

Tema movido desde PHP a javascript
  #6 (permalink)  
Antiguo 05/03/2009, 10:46
Avatar de JavierB
Colaborador
 
Fecha de Ingreso: febrero-2002
Ubicación: Madrid
Mensajes: 25.052
Antigüedad: 22 años, 2 meses
Puntos: 772
Respuesta: arreglo de checkbox y su validacion

Hola GREGgraffin

A ver si este ejemplo te sirve de ayuda:

Código javascript:
Ver original
  1. <html>
  2. <head>
  3. <script type="text/javascript">
  4. function marcar(obj) {
  5.   chk = obj.parentNode.getElementsByTagName('input');
  6.   for (i=0; ele=chk[i]; i++)
  7.     ele.checked = obj.checked;
  8. }
  9. </script>
  10. </head>
  11. <body>
  12. <div>
  13. Marcar Renault: <input type="checkbox" onclick="marcar(this)" /><br />
  14. <input type="checkbox" />
  15. <input type="checkbox" />
  16. <input type="checkbox" />
  17. </div>
  18. <div>
  19. Marcar Volvo: <input type="checkbox" onclick="marcar(this)" /><br />
  20. <input type="checkbox" />
  21. <input type="checkbox" />
  22. <input type="checkbox" />
  23. </div>
  24. </body>
  25. </html>

Saludos,
  #7 (permalink)  
Antiguo 05/03/2009, 10:58
Avatar de jeybi  
Fecha de Ingreso: julio-2008
Ubicación: Mexico
Mensajes: 130
Antigüedad: 15 años, 9 meses
Puntos: 10
Respuesta: arreglo de checkbox y su validacion

Pues veamos, lo que quieres es, que al checar un modelo de X marca, tambien la marca se ponga checked, no?

Si es esto, entonces vamos por partes. Primero, no veo que es lo que intentas hacer con 'seleccionar()', supondre que hay no esta tu problema.

Segundo, no puedes pasar 'this.document' como parametro.A que te refieres con eso?, this equivale al elemento (el checkbox) que llama a la funcion, pero el objeto checkbox no tiene ninguna propiedad 'document'. Como sea, me centrare en tu problema.

Y tercero, no veo como quieres hacer lo mencionas si el checkbox modelo, no tiene ninguna referencia a ninguna marca, es decir, como quieres que el programa sepa a que marca pertenece cada modelo ?. Debes, en algun lado del checkbox poner una referencia. En mi ejemplo pongo la marca a la que pertenece el modelo, en el atributo class del checkbox (ya tu la generas con php de alguna forma).

Ok bien aqui te dejo un script, que hace lo que creo que quieres:

Código javascript:
Ver original
  1. function tildar(modelo) {
  2. if(modelo.checked == true) {   //Se ha checkeado nuestro checkbox modelo
  3. modelo.form[modelo.className].checked = true;  //Chekeamos la marca correspondiente al modelo (la cual esta especificada en el class de nuestro modelo                  
  4. }
  5. else if(modelo.form[modelo.className].checked == true)  {//Para desmarcar la marca, debemos checkar si no hay ningun otro modelo activado con esa marca, para eso primero vemos si tenemos activado el checkbox marca, si es asi, continuamos
  6. var checks = 0;
  7. var inputs = modelo.form.getElementsByTagName('input'); //Obtenemos todos los inputs de la forma actual
  8. for(var i = 0;i < inputs.length; i++){   //Checamos cada uno de ellos
  9.     if(inputs[i].type == 'checkbox'){//Si el input en curso es un checkbox
  10.         //Si tiene la misma class que nuestro chexbox clikeado (pertenecen a la misma marca), y esta marcado..
  11.         if(inputs[i].className == modelo.className  && inputs[i].checked == true){
  12.             checks++;                         //Aumentamos en uno la variables chexks            
  13.         }
  14.     }
  15. }
  16.  
  17. if(checks == 0) //Si ningun otro modelo de la misma marca esta cheked, entonces podemos desmarcar la marca
  18.     modelo.form[modelo.className].checked = false;
  19.    
  20. }
  21. }

Aqui un ejemplo de uso:
Código html:
Ver original
  1. <form method="post" action="abc.cgi">
  2. <input type='checkbox' value='$id_marca' onClick='seleccionar(this.document)' name='nombre_marca[0]' ;>
  3.  
  4. <input type='checkbox' value='$id_modelo' name='nombre_modelo[0]' onClick="tildar(this)" class="nombre_marca[0]">
  5. <input type='checkbox' value='$id_modelo' name='nombre_modelo[1]' onClick="tildar(this)" class="nombre_marca[0]">
  6. <input type='checkbox' value='$id_modelo' name='nombre_modelo[2]' onClick="tildar(this)" class="nombre_marca[0]">
  7. <br />
  8.  
  9. <input type='checkbox' value='$id_marca' onClick='seleccionar(this.document)' name='nombre_marca[1]' ;>
  10.  
  11. <input type='checkbox' value='$id_modelo' name='nombre_modelo[0]' onClick="tildar(this)" class="nombre_marca[1]">
  12. <input type='checkbox' value='$id_modelo' name='nombre_modelo[1]' onClick="tildar(this)" class="nombre_marca[1]">
  13. <input type='checkbox' value='$id_modelo' name='nombre_modelo[2]' onClick="tildar(this)" class="nombre_marca[1]">
  14. </form>

Como puedes aprecias, lo unico que agrege fue una clase en los modelos(ademas de algunas comillas en los inputs que debes fijarte en colocar o nada funcionar), que coincide con el name de la marca al que pertenecen los modelos. El script es sencillo, aun falta por pulir varias cosas, por ejemplo, bloquear la desactivacion de la marca si hay un modelo seleccionado con esa marca. Aunque podrias evitar todo esto si usaras campos 'hidden', asi el usario solo maneja los modelos, mientras por atras de la pagina activas/desactivas marcas.

Recuerda ademas, que si usas mas de una clase en el input el script no funcionara y debes crear algun script que te cheque cada una de las clases del input para encontrar coincidencias.

Última edición por jeybi; 05/03/2009 a las 11:03
  #8 (permalink)  
Antiguo 05/03/2009, 14:20
 
Fecha de Ingreso: enero-2009
Mensajes: 10
Antigüedad: 15 años, 3 meses
Puntos: 0
Respuesta: arreglo de checkbox y su validacion

Gracias Jeybi ya solucione el porblema gracias a tu ejemplo, se agradece arto la ayuda

ahora solo tengo que ver como lo soluciono con un de 3 niveles ejemplo marca,modelo,version
  #9 (permalink)  
Antiguo 05/03/2009, 14:42
Avatar de jeybi  
Fecha de Ingreso: julio-2008
Ubicación: Mexico
Mensajes: 130
Antigüedad: 15 años, 9 meses
Puntos: 10
Respuesta: arreglo de checkbox y su validacion

Podrias usar clases tambien...
class="nombre_marca[X] modelo_version[X]"

Ya despues descompones las clases (cortas donde haya espacios en blancos) y checas referencias...

Cualquier cosa, postea y vemos como te ayudamos.
  #10 (permalink)  
Antiguo 06/03/2009, 07:12
 
Fecha de Ingreso: enero-2009
Mensajes: 10
Antigüedad: 15 años, 3 meses
Puntos: 0
Respuesta: arreglo de checkbox y su validacion

gracias jeybi.

modelo
marca
version
por lo que entiendo al chequear en el 3er nivel osea version, envio las 2 clases y luego separarlos como 2 string y que realice el procedimiento a los dos por separado, creo

la verdad de javascript se lo mas basico si me pudieras ayudar se lo agradeceria el doble

gracias por responder
  #11 (permalink)  
Antiguo 06/03/2009, 11:42
Avatar de jeybi  
Fecha de Ingreso: julio-2008
Ubicación: Mexico
Mensajes: 130
Antigüedad: 15 años, 9 meses
Puntos: 10
Respuesta: arreglo de checkbox y su validacion

Ok, ¿ es marca, modelo y version cierto?

Es sencillo, el otro dia hize un script parecido pero para radios, que llegaba infinitos niveles, usando solo una clase, esperame un poco y te hago un ejemplo, tienes suerte que este de vacaciones :).
  #12 (permalink)  
Antiguo 06/03/2009, 12:58
Avatar de jeybi  
Fecha de Ingreso: julio-2008
Ubicación: Mexico
Mensajes: 130
Antigüedad: 15 años, 9 meses
Puntos: 10
Respuesta: arreglo de checkbox y su validacion

Ok mira, la solucion fue sencilla, solamente hize la funcion recursiva
Código javascript:
Ver original
  1. function tildar(modelo) {
  2. if(!modelo.className)  //Esto se ejecuta cuando llegamos al tope, el ultimo padre
  3.     return;
  4.    
  5. if(modelo.checked == true) {   //Se ha checkeado nuestro checkbox modelo
  6.     modelo.form[modelo.className].checked = true;  //Chekeamos la marca correspondiente al modelo (la cual esta especificada en el class de nuestro modelo
  7.     modelo.form[modelo.className].disabled = 'disabled';
  8.  
  9. }
  10. else  {//Para desmarcar la marca, debemos checkar si no hay ningun otro modelo activado con esa marca, para eso primero vemos si tenemos activado el checkbox marca, si es asi, continuamos if(modelo.form[modelo.className].checked == true)
  11. var checks = 0;
  12. var inputs = modelo.form.getElementsByTagName('input'); //Obtenemos todos los inputs de la forma actual
  13. for(var i = 0;i < inputs.length; i++){   //Checamos cada uno de ellos
  14.     if(inputs[i].type == 'checkbox'){//Si el input en curso es un checkbox
  15.         //Si tiene la misma class que nuestro chexbox clikeado (pertenecen a la misma marca), y esta marcado..
  16.         if(inputs[i].className == modelo.className  && inputs[i].checked == true){
  17.             checks++;                         //Aumentamos en uno la variables chexks            
  18.         }
  19.     }
  20. }
  21.  
  22. if(checks == 0) {//Si ningun otro modelo de la misma marca esta cheked, entonces podemos desmarcar la marca
  23.     modelo.form[modelo.className].checked = false;  
  24.     modelo.form[modelo.className].removeAttribute('disabled');
  25. }
  26.    
  27. else //Si no, la marcamos, esto por si el usuario desmarco la 'marca' intencionalmente
  28.     modelo.form[modelo.className].checked = true;
  29. }
  30.  
  31. if(modelo.form[modelo.className].form[modelo.className])
  32.     tildar(modelo.form[modelo.className].form[modelo.className]);
  33. }

Cambie algunas cosas:

1. Elimine la condicion ' if(modelo.form[modelo.className].checked == true)' en el primer else, no era necesario y ademas nos impedia volver a marcar el padre (modelo, marca) si fue desmarcado por el usuario (cosa que no pasa porque ahora se deshabilita el chekbox).

2.Añadi un else y una sentencia nueva en el if:
Código javascript:
Ver original
  1. if(checks == 0) {//Si ningun otro modelo de la misma marca esta cheked, entonces podemos desmarcar la marca
  2.     modelo.form[modelo.className].checked = false;  
  3.     modelo.form[modelo.className].removeAttribute('disabled');
  4. }
  5.    
  6. else //Si no, la marcamos, esto por si el usuario desmarco la 'marca' intencionalmente
  7.     modelo.form[modelo.className].checked = true;
  8. }
Esto deshabilita el boton y lo marca y lo desmarca deacuero con los hijos seleccionados.

3. Añadi un if al final, que comprueba si el class name del padre del elemento actual apunta a algun elemento en la form (referencia class a name), si es asi, la funcion se llama asi misma con el elemento encontrado (el padre del padre de el elemento, el abuelo), y esto continua hasta que se terminen los padres.

4.Añadi modelo.form[modelo.className].disabled = 'disabled'; en el segundo if (en el ejemplo anterior, el primer if), simplemente deshabilitamos el check padre si hemos seleccionado un hijo, asi el usario no podra desacivarlo y mandar informacion incorrecta.

5. Añadi un if:
if(!modelo.className) //Esto se ejecuta cuando llegamos al tope, el ultimo padre
return;
Esto para detener la recursividad y no cause errores, ya que el ultimo ancestro de todos los cheks no tendra una clase que apunte a otro elemento(todo esto es suponiendo que las clases las usas solo para el funcionamiento y que no añadas mas clases o tendras que modificar el chequeo de clases con otra funcion, por ejemplo si añades en el chek de la marca un class='estilo_marca' o algo por estilo deja de funcionar este if y habra errores en el script).

Aun le falta por optimizar varias cosas, pero creo que lo puedes usar tal cual, ademas deberias cambiar todos el nombre del parametro 'modelo' por otro mas ocorde, ya que no siempre checa el modelo y no se ve muy claro que es lo que hace.

EDIT: Aqui el HTML que use de prueba
Código HTML:
Ver original
  1. <form method="post" action="abc.cgi">
  2. <input type='checkbox' value='$id_marca' name='nombre_marca[0]';> Marca
  3. <br/>
  4.  
  5. <input type='checkbox' value='$id_modelo' name='nombre_modelo[0]' onClick="tildar(this)" class="nombre_marca[0]">Modelo1
  6. <input type='checkbox' value='$id_modelo' name='nombre_modelo[1]' onClick="tildar(this)" class="nombre_marca[0]">Modelo2
  7. <input type='checkbox' value='$id_modelo' name='nombre_modelo[2]' onClick="tildar(this)" class="nombre_marca[0]">Modelo3
  8. <br />
  9.  
  10. <input type='checkbox' value='$id_version' name='numero_version[0]' onClick="tildar(this)" class="nombre_modelo[0]">Modelo1 Version1
  11. <input type='checkbox' value='$id_version' name='numero_version[1]' onClick="tildar(this)" class="nombre_modelo[0]">Modelo1 Version2
  12. <br />
  13. <input type='checkbox' value='$id_version' name='numero_version[2]' onClick="tildar(this)" class="nombre_modelo[1]">Modelo2 Version1
  14. <input type='checkbox' value='$id_version' name='numero_version[3]' onClick="tildar(this)" class="nombre_modelo[1]">Modelo2 Version2
  15. <br />
  16. <input type='checkbox' value='$id_version' name='numero_version[4]' onClick="tildar(this)" class="nombre_modelo[2]">Modelo3 Version1
  17. <input type='checkbox' value='$id_version' name='numero_version[5]' onClick="tildar(this)" class="nombre_modelo[2]">Modelo3 Version2
  18.  
  19.  <br />
  20.   <br />
  21.  
  22. <input type='checkbox' value='$id_marca' name='nombre_marca[1]' ;>Marca2
  23. <br />
  24.  
  25. <input type='checkbox' value='$id_modelo' name='nombre_modelo[3]' onClick="tildar(this)" class="nombre_marca[1]">Modelo1
  26. <input type='checkbox' value='$id_modelo' name='nombre_modelo[4]' onClick="tildar(this)" class="nombre_marca[1]">Modelo2
  27. <input type='checkbox' value='$id_modelo' name='nombre_modelo[5]' onClick="tildar(this)" class="nombre_marca[1]">Modelo3
  28. </form>

Última edición por jeybi; 06/03/2009 a las 14:02
  #13 (permalink)  
Antiguo 09/03/2009, 07:24
 
Fecha de Ingreso: enero-2009
Mensajes: 10
Antigüedad: 15 años, 3 meses
Puntos: 0
De acuerdo Respuesta: arreglo de checkbox y su validacion

JEYBI nuevamente gracias por resolverme el problema, te pasaste


saludos y muchas gracias
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 12:36.