Ver Mensaje Individual
  #6 (permalink)  
Antiguo 17/10/2007, 08:40
Avatar de derkenuke
derkenuke
Colaborador
 
Fecha de Ingreso: octubre-2003
Ubicación: self.location.href
Mensajes: 2.665
Antigüedad: 20 años, 6 meses
Puntos: 45
Re: validar checkboxes

Hola leo_25:

Viéndolo así ya nos podemos hacer a la idea. La estructura cambia, no sólo hay rubros[1] sino que hay rubros[1], [2], [3]....

Bueno, este script está preparado, creo, para todo lo que pides:

Código PHP:
<!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" xml:lang="es" lang="es">
<
head>
<
meta http-equiv="Content-type" content="text/html;charset=iso-8859-1" />
<
meta name="Author" content="derkeNuke" />
<
title>P&#225;gina nueva</title>
<style type="text/css">

</
style>
</
head>

<
body>

<
form onsubmit="return valida(this)" action="">
    <
input type='checkbox' name='rubros[1]' value='x' />Alimentos
    
<ul id="uno">
        <
li><input type='checkbox' name='subrubros[1][2]' value='a' />Frutas</li>
        <
li><input type='checkbox' name='subrubros[1][3]' value='b' />Verduras</li>
    </
ul>
    <
input type='checkbox' name='rubros[2]' value='x' />Prendas de vestir
    
<ul id="dos">
        <
li><input type='checkbox' name='subrubros[2][2]' value='a' />Vestidos</li>
        <
li><input type='checkbox' name='subrubros[2][3]' value='b' />Camisas</li>
    </
ul>
<
input type='checkbox' name='rubros[3]' value='x' />Bebidas
    
<ul id="">
        <
li><input type='checkbox' name='subrubros[3][2]' value='a' />Gaseosas</li>
        <
li><input type='checkbox' name='subrubros[3][3]' value='b' />Agua Mineral</li>
    </
ul>

    <
button type="submit">Envia</button>
</
form>


<
script type="text/javascript">
<!--


function 
valida(fr) {
    var 
hayRubroSeleccionado false;
    
// Buscamos e iteramos con todos los elementos que se llamen rubros[x]
    
for(var x=1rubroX; (rubroX fr["rubros["+x+"]"]); x++) {
        
// Siempre que esté seleccionado
        
if( rubroX.checked ) {
            
hayRubroSeleccionado true;
            
//Validemos si hay subrubros seleccionados
            // Vamos mirando su hermano y el hermano del hermano hasta encontrar un UL
            
var hermanoUL rubroX.nextSibling;
            if( 
hermanoUL.nodeType!=|| hermanoUL.tagName.toUpperCase()!="UL" )
                
hermanoUL hermanoUL.nextSibling;
            
//Ahora hermanoUL será la lista que hay al lado (que damos por entendido que contiene los subrubros)
            
var LIsubrubros hermanoUL.getElementsByTagName("LI");
            var 
srSeleccionados 0;            // número de sburubros seleccionados
            
for(var j=0j<LIsubrubros.lengthj++) {        //recorremos los elementos LI
                
if( LIsubrubros[j].firstChild.checked )            //firstChild será el checkbox si no dejamos espacios en el xHTML
                    
srSeleccionados++;
            }
            if( 
srSeleccionados == ) {
                
alert("Debe seleccionar algún subrubro para '"+rubroX.nextSibling.nodeValue+"'");
                return 
false;
            }
        } 
//if rubro.checked
    
}
    
// Comprobamos que haya al menos un rubro seleccionado. Si hay devolvemos true, si no hay devolvemos false
    
if( hayRubroSeleccionado ) {
        
alert("Todo correcto!");
    }
    else {
        
alert("Debe seleccionar al menos un rubro");
        return 
false;
    }
}



// -->
</script>

</body>
</html> 

Testéalo. Supongo que nos quedarán pocas modificaciones para la versión final.


Un saludo
__________________
- Haz preguntas inteligentes, y obtendrás más y mejores respuestas.
- Antes de postearlo Inténtalo y Búscalo.
- Escribe correctamente tus mensajes.