Ver Mensaje Individual
  #7 (permalink)  
Antiguo 05/03/2009, 10:58
Avatar de jeybi
jeybi
 
Fecha de Ingreso: julio-2008
Ubicación: Mexico
Mensajes: 130
Antigüedad: 15 años, 10 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