Tengo este código que despliega y pliega un menú.
Tiene unos checkbox que cuando se pulsa el de un nivel superior deselecciona los checkbox seleccionados anteriormente.
Necesito hacer también a la inversa, es decir, si hay un nivel superior seleccionado y pulso un nivel inferior, tendría que deseleccionar los de niveles superiores.
(Solo hay cuatro niveles, 0,1,2,3 y el valor está en n3) Pero ojo, esto es una demo, por lo que luego el menú tendrá varias opciones en los niveles y no conoceré los nombres de los niveles superiores, porque vienen de una consulta SQL.
Los nombres de los checkbox los formo con el valor del nivel que está en n3 y el de la variable que le sigue, de esta forma un nombre de un nivel 0 estará formado por 0_+ n0 + n0 + n0 quedando por ejemplo así 0_3_3_3
Un nivel 1 será 1_+ n0 + n1 + n1: 1_3_32_32
Y así sucesivamente.
Necesitaría poder decir por ejemplo algo así
if (casfam[name_0].checked == true ) Entonces lo descheckeo
Pero del name_0 solo conozco el principio.
Por ejemplo si pulso el 1º nivel y este es 1_3, todo los checkbox superiores que viene detras, se llamarán 2_3_(lo que sea) en el 2º nivel y 3_3_(lo que sea) en el 3º nivel
Es decir, con la solución de que ponga en false todos los checkbox que comiencen en su nombre con x_3 donde x será el nivel por ejemplo, ya funcionaría.
Pero NO sé como decirle que me lea todos los checkbox que su nombre comiencen por algo
Alguna sugerencia.
Código:
<script>
//Detectar checkeos
function check_box(obj,n3,n0,n1,n2) {
name_box = casfam[obj.name].name;
valor_box = casfam[obj.name].value;
valor_che = casfam[obj.name].checked;
nivel = n3
// DESMARCAMOS checkboxs niveles inferiores
// Si pulsamos el nivel 3
if (n3 == "3" && valor_che == true){
name_2 = "2_" + n0 + "_" + n1 + "_" + n2
if (casfam[name_2].checked == true) {
casfam[name_2].checked = false; }
name_1 = "1_" + n0 + "_" + n1 + "_" + n1
if (casfam[name_1].checked == true) {
casfam[name_1].checked = false; }
name_0 = "0_" + n0 + "_" + n0 + "_" + n0
if (casfam[name_0].checked == true) {
//casfam[name_0].disabled = true;
casfam[name_0].checked = false; }
}
// Si pulsamos el nivel 2
if (n3 == "2" && valor_che == true){
name_1 = "1_" + n0 + "_" + n1 + "_" + n1
if (casfam[name_1].checked == true) {
casfam[name_1].checked = false; }
name_0 = "0_" + n0 + "_" + n0 + "_" + n0
if (casfam[name_0].checked == true) {
casfam[name_0].checked = false; }
}
// Si pulsamos el nivel 1
if (n3 == "1" && valor_che == true){
name_0 = "0_" + n0 + "_" + n0 + "_" + n0
if (casfam[name_0].checked == true) {
casfam[name_0].checked = false; }
}
//-- Cerramos el Detector de Checkeos
}
</script>
<html><body>
<div id="familias" class="cascada_fam">
<form name="casfam" action>
<div id="0_3" class="fam_00">
<input class="fam" type="checkbox" name="0_3_3_3" onclick="check_box(this,'0','3','3','3')" value="0|3"><a class="l_tit" href="javascript:mostrardiv('1_3');">
- COMPONENTES</a> (5)
<div id="1_3" style="display:none;" class="fam_10">
<input class="fam" type="checkbox" name="1_3_36_36" onclick="check_box(this,'1','3','36','36')" value="1|36"><a class="l_tit" href="javascript:mostrardiv('2_3_36');">
- CONTROLADORAS</a> (5)
<div id="2_3_36" style="display:none;" class="fam_10">
<input class="fam" type="checkbox" name="2_3_36_EH" onclick="check_box(this,'2','3','36','EH')" value="2|36"><a class="l_tit" href="javascript:mostrardiv('3_3_36_EH');">
- Adaptadores</a> (5)
<div id="3_3_36_EH" style="display:none;" class="fam_10">
<input class="fam" type="checkbox" name="3_3_36_EH" onclick="check_box(this,'3','3','36','EH')" value="3|EH">
Audio/Video (5)
</div>
</div>
</div>
</div>
</form>
</div>
</body></html>