Ver Mensaje Individual
  #7 (permalink)  
Antiguo 17/10/2007, 09:33
leo_25
 
Fecha de Ingreso: agosto-2004
Ubicación: Lima
Mensajes: 109
Antigüedad: 20 años, 3 meses
Puntos: 1
Re: validar checkboxes

muchas gracias derkenuke por tu ayuda te comento que hice solo una pequeña modificacion al script y tambien me funciono no se si estoy haciendo bien por eso te lo comento. las modificaciones son:
Código HTML:
<!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ágina nueva</title>
<style type="text/css">

</style>
</head>

<body>

<form onsubmit="return valida(this)" action="">
    <input type='checkbox' id='rubros[]' name='rubros[]' 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' [B]id='rubros[]' [/B] 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 = [B]fr["rubros[]"];[/B]
    // Miramos que uno y sólo uno esté seleccionado
    var seleccionados = [];
    for(var i=0; i<rubros1.length; i++) {
        if( rubros1[i].checked )        // Si está seleccionado
            seleccionados.push( rubros1[i] );
    }
    // Comprobamos que haya al menos un elemento seleccionado
    if( seleccionados.length == 0 ) {
        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=0; i<seleccionados.length; i++) {
        // Vamos mirando su hermano y el hermano del hermano hasta encontrar un UL
        var hermanoUL = seleccionados[i].nextSibling;
        if( hermanoUL.nodeType!=1 || 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=0; j<LIsubrubros.length; j++) {
            if( LIsubrubros[j].firstChild.checked )            //firstChild será el checkbox si no dejamos espacios en el xHTML
                srSeleccionados++;
        }
        if( srSeleccionados == 0 ) {
            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>