Ver Mensaje Individual
  #2 (permalink)  
Antiguo 15/10/2007, 16:44
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:

Lo primero ten mucho cuidado al construir tu documento (x)HTML, veo errores muy gordos ahí. Si empezamos de esa base, todo funcionará mal.


Ésta sería mi solucion. Un poquito de DOM para navegar por los nodos, y fácil fácil:


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[1]' value='x' />Prendas de vestir
    
<ul id="dos">
        <
li><input type='checkbox' name='subrubros[1][2]' value='a' />Vestidos</li>
        <
li><input type='checkbox' name='subrubros[1][3]' value='b' />Camisas</li>
    </
ul>
    <
button type="submit">Envia</button>
</
form>


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


function 
valida(fr) {
    
// Buscamos todos los elementos que se llamen subrubros[1]
    
var rubros1 fr["rubros[1]"];
    
// Miramos que uno y sólo uno esté seleccionado
    
var seleccionados = [];
    for(var 
i=0i<rubros1.lengthi++) {
        if( 
rubros1[i].checked )        // Si está seleccionado
            
seleccionados.pushrubros1[i] );
    }
    
// Comprobamos que haya al menos un elemento seleccionado
    
if( seleccionados.length == ) {
        
alert("Debe seleccionar al menos un rubro.");
        return 
false;
    }
    
// Ahora con los elementos validamos que haya seleccionado al menos un subrubro de ellos:
    
for(var i=0i<seleccionados.lengthi++) {
        
// Vamos mirando su hermano y el hermano del hermano hasta encontrar un UL
        
var hermanoUL seleccionados[i].nextSibling;
        if( 
hermanoUL.nodeType!=|| hermanoUL.tagName.toUpperCase()!="UL" )
            
hermanoUL hermanoUL.nextSibling;
        
//Ahora hermanoUL será la lista (que damos por entendido que contiene los subrubros)
        
var LIsubrubros hermanoUL.getElementsByTagName("LI");
        var 
srSeleccionados 0;
        for(var 
j=0j<LIsubrubros.lengthj++) {
            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 '"+seleccionados[i].nextSibling.nodeValue+"'");
            return 
false
        
}
    }
    
// Si hemos llegado hasta aquí se supone que no han habido errores
    
return true;
}



// -->
</script>

</body>
</html> 



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.