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>