Foros del Web » Programando para Internet » Javascript »

Selects dependientes

Estas en el tema de Selects dependientes en el foro de Javascript en Foros del Web. Hola gente Tengo una pagina a la cual le tengo que poner 3 selects que dependen mutuamente: Categoria > Campeonato > Año Tengo un script ...
  #1 (permalink)  
Antiguo 03/07/2006, 13:06
 
Fecha de Ingreso: mayo-2006
Mensajes: 178
Antigüedad: 18 años
Puntos: 7
Selects dependientes

Hola gente

Tengo una pagina a la cual le tengo que poner 3 selects que dependen mutuamente:

Categoria > Campeonato > Año

Tengo un script que funciona hasta que los nombres de los datos son iguales. Por ejemplo, si selecciono: Nacional B > Apertura > 2006 funciona. Pero si el caso es:

Primera C > Primera Fase > 2005
Primera B metropolitana > Primera Fase > 2005

El script me devuelve el valor de la primera opcion cuando yo elijo la segunda.

Primero pense que era porque en el value del select los nombre se repetían pero no. Si los valores que se muestran en pantallan son iguales no funciona.

Les paso el script por si alguien lo entiende mejor que yo.

Gracias.


Código:
<script language="JavaScript">
contents=new Array();

function TCN_addContent(str){
	contents.push(str);
	arrayValues = new Array();
	for(i=0;i<contents.length;i++){
		arrayValues[i]=contents[i].split(separator);
	}
}

function TCN_makeComboGroup(){
	comboGroup=new Array();
	args=TCN_makeComboGroup.arguments;
	for(i=0;i<args.length;i++){
		comboGroup[i]=MM_findObj(args[i]);
	}
}

function TCN_startCombo(){
	combo1=comboGroup[0];
	for (i=0;i<arrayValues.length;i++){
		existe=false;
		for(j=0;j<combo1.options.length;j++){
			if(arrayValues[i][0]==combo1.options[j].text){
				existe=true;
			}
		}
		if(existe==false){
			combo1.options[combo1.options.length]=new Option(arrayValues[i][0],arrayValues[i][1]);
		}//end if
	}//for(i)
	combo1.options[0].selected=true;
	TCN_reload(combo1);
}//function

function TCN_reload(from){
//averiguamos el indice del combo que llama:
	for(j=0;j<comboGroup.length;j++){
		if(comboGroup[j]==from){
			//el nuestro es el siguiente
			i=j+1;
			thisCombo=comboGroup[i];
			prevCombo=comboGroup[i-1];
			prevComboTextIndex=j*2;
			thisComboIndex=i;
			thisComboTextIndex=(i*2);
			thisComboValueIndex=(i*2)+1;
		}
	}
	for (m=thisCombo.options.length-1;m>=0;m--){
		thisCombo.options[m]=null;
	}
	for(i=0;i<arrayValues.length;i++){
		existe=false;
		if(arrayValues[i][prevComboTextIndex]==prevCombo.options[prevCombo.selectedIndex].text){
			for(j=0;j<thisCombo.options.length;j++){
				if(arrayValues[i][thisComboTextIndex]==thisCombo.options[j].text){
					existe=true;
				}
			}
			if(existe==false){
				thisCombo.options[thisCombo.options.length]=new Option(arrayValues[i][thisComboTextIndex],arrayValues[i][thisComboValueIndex]);
			}
		}
	}
	thisCombo.options[0].selected=true;
	if(thisComboIndex<comboGroup.length-1){
		TCN_reload(thisCombo);
	}
}

function MM_findObj(n, d) { //v4.01
  var p,i,x;  if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
    d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
  if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
  for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);
  if(!x && d.getElementById) x=d.getElementById(n); return x;
}
</script>

Código:
<form name="form1" method="get" action="tabla_de_posiciones.php">
  <select name="categoria" class="fieldBuscador" onChange="TCN_reload(this);"></select>
  <select name="campeonato" class="fieldBuscador" onChange="TCN_reload(this);"></select>
  <select name="campeonatoID" class="fieldBuscador" id="anio">
  </select>
  <input type="submit" name="Submit" value="Submit">
  <script language="JavaScript" type="text/JavaScript">

		TCN_makeComboGroup('categoria','campeonato', 'anio');
		
		var separator="<+>";
		TCN_addContent("Seleccione una Categoria<+>0<+>Seleccione un Campeonato<+>0<+>Año<+>0");
TCN_addContent("Nacional B<+>Nacional B<+>Apertura<+>Apertura<+>2005<+>9");
TCN_addContent("Nacional B<+>Nacional B<+>Clausura<+>Clausura<+>2006<+>14");
TCN_addContent("Primera B metropolitana<+>Primera B metropolitana<+>Primera Fase<+>Primera Fase<+>2005<+>10");
TCN_addContent("Primera B Metropolitana<+>Primera B Metropolitana<+>Segunda Fase<+>Segunda Fase<+>2006<+>15");
TCN_addContent("Primera C<+>Primera C<+>Primera Fase<+>Primera Fase<+>2005<+>11");
TCN_addContent("Primera C<+>Primera C<+>Segunda Fase<+>Segunda Fase<+>2006<+>16");
TCN_addContent("Primera D<+>Primera D<+>Apertura<+>Apertura<+>2005<+>12");
TCN_addContent("Primera D<+>Primera D<+>Clausura<+>Clausura<+>2006<+>17");

		TCN_startCombo();
  </script>
</form>
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 02:19.