Ver Mensaje Individual
  #1 (permalink)  
Antiguo 09/08/2011, 11:15
jose_cab
 
Fecha de Ingreso: noviembre-2008
Ubicación: Barcelona
Mensajes: 52
Antigüedad: 15 años, 5 meses
Puntos: 0
Pregunta Deseleccionar checkboxes solo si su nombre contiene un texto ??

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>