Ver Mensaje Individual
  #1 (permalink)  
Antiguo 03/07/2006, 13:06
Jona77
 
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>