Foros del Web » Programando para Internet » Javascript »

Selects cascada y arrays bidimensionales

Estas en el tema de Selects cascada y arrays bidimensionales en el foro de Javascript en Foros del Web. Buenas, hace poco que he empezado con javascript y la programación en general y más o menos me voy desenvolviendo. El problema es que he ...
  #1 (permalink)  
Antiguo 03/09/2006, 03:46
 
Fecha de Ingreso: septiembre-2006
Mensajes: 4
Antigüedad: 18 años, 2 meses
Puntos: 0
Selects cascada y arrays bidimensionales

Buenas, hace poco que he empezado con javascript y la programación en general y más o menos me voy desenvolviendo. El problema es que he estado intentando usar java en mi web para que dependiendo de lo que el usuario seleccione en un select/option/lista desplegable o como se llame, yo los llamo select , otro select se llene de datos dependiendo de lo que el usuario haya elegido, y cogiendo estos datos de un array bidimensional.
Para hacernos una idea mejor, supongamos que en el select inicial pongo una lista de equipos de futbol para elegir, Barcelona, Real Madrid, Betis...y más abajo, tengo otro select donde quiero que aparezcan los nombres de los jugadores del equipo que he elegido. Los nombres los buscare dentro de un array bidimensional llamado Jugadores que he estructurado de esta manera:

Jugadores = new Array();
Jugadores =[
[0,0,9,3,"Ronaldo"],
[1,1,10,3,"Etoo"],
[2,1,8,2,"Ronaldinho"],
];
NoJugadores = 3

El primer numero es la ID k le dare al jugador y donde le dare su value para poder trastear con otros objetos y los datos en su mismo vector...el segundo representara al equipo al k pertenece (0 Real Madrid, 1 Barcelona...), el tercero el número, el cuarto la posición (3 Delantero p.ej.) cuarto el nombre...
Pues bien, como dije lo que quiero es que al coger Real Madrid en el select de arriba, abajo me salga el nombre de todos los jugadores con un 0 en la segunda posición de los arrays, y que su value sea el que viene como primer numero en el array. Hasta ahora lo he estado abordando de la siguiente manera, pero no entiendo por qué no consigo hacerlo funcionar. Suponiendo que a Real Madrid lo tengo en el value = 0 y a Barcelona = 1, introduzco lo siguiente:

j=0
if (document.formulario.equipos.value = 1){
for (i=0;i<=NoJugadores;i++){
if (Jugadores[i][1]=1){document.formulario.jugadores.options[j]=new Option(Jugadores[i][4],Jugadores[i][0]);}}}

Esto seria para elegir si es Barcelona. Para Real Madrid irían siguiendo formulas igual pero igualando a 0, etc.. La cosa,es que esto no me funciona, aparecen los nombres en los select pero no se dejan seleccionar, y no entiendo el por qué. Además al ir cambiando a veces se van acumulando montones de nombres.
Una ayudita? ;)
Saludos y perdón, creo que me excedido en longitud del mensaje :P
  #2 (permalink)  
Antiguo 04/09/2006, 01:08
Avatar de KarlanKas
Moderador extraterrestre
 
Fecha de Ingreso: diciembre-2001
Ubicación: Madrid
Mensajes: 6.987
Antigüedad: 22 años, 11 meses
Puntos: 61
Hola Hadesll!

Bienvenido a los foros!

Muy interesante tu consulta. Te diré que los fallos que tienes son mínimos, en la igualdad del if deberías poner if(Jugadores[i][1]==1) es decir, poner 2 signos de igual seguidos. Y respecto a que se van acumulando tal vez sea porque el j=0 no se ejecuta cada vez que cambias el select.

Para ayudarte un poco he hecho mi propio ejemplo que espero que te ayude:
Código:
<html>
<head>
	<title>Untitled</title>
	
	<script>
	jugadores=new Array();

	//Este seleccionador es el "constructor de jugadores". Creo que te hará el código más fácil
	function seleccionador(equipo,camiseta,posicion,nombre){
	this.equipo=equipo;
	this.nombre=nombre;
	this.camiseta=camiseta;
	this.posicion=posicion;
	}

	//jugadores[id del jugador]=new seleccionador(equipo,camiseta,posicion,nombre);
	jugadores[0]=new seleccionador(0,9,3,"Ronaldo");
	jugadores[1]=new seleccionador(1,10,3,"Etoo");
	jugadores[2]=new seleccionador(1,8,2,"Ronaldinho");
j=0;
function ponJugadores(equip){
//BORRAMOS LOS OPTION ANTERIORES
for(q=0;q<j;q++){
document.forms['selecto']['integrantes'].options[q]=null;
}

//INICIALIZAMOS EL N DE OPTIONS
j=0;

//RECORREMOS LA LISTA DE JUGADORES
for(a=0;a<jugadores.length;a++){

//ENCONTRAMOS UNO DEL EQUIPO CORRESPONDIENTE
if(jugadores[a].equipo==equip){

//LO AÑADIMOS
document.forms['selecto']['integrantes'].options[j]=new Option(jugadores[a].nombre,a);

j++;
}
}

}

	</script>
</head>

<body>
<form name="selecto">
<select name="equipos" id="equipos" size="1" onchange="ponJugadores(this.value)">
			<option value="" SELECTED>Elige a un equipo</option>
			<option value="0" >Real Madrid</option>
			<option value="1">FC Barcelona</option>
			<option value="2">Garrulos Balompié</option></select>
<select name="integrantes"></select>
</form>


</body>
</html>
Fíjate en que uso un constructor (al que llamo seleccionador). Una herramienta que tal vez la encuentres útil. Si tienes dudas sobre mi código por favor, pregunta!
Un saludo!
__________________
Cómo escribir

No hay pregunta tonta, sino tonto que quiere seguir en la ignorancia.
  #3 (permalink)  
Antiguo 06/09/2006, 13:45
 
Fecha de Ingreso: septiembre-2006
Mensajes: 4
Antigüedad: 18 años, 2 meses
Puntos: 0
Pues siento mucho haber tardado en responder. Mirando tu código he aprendido un par de trucos bastante majos. Me gustaría darte las gracias, me ha sido de mucha ayuda.
  #4 (permalink)  
Antiguo 06/09/2006, 15:42
Avatar de KarlanKas
Moderador extraterrestre
 
Fecha de Ingreso: diciembre-2001
Ubicación: Madrid
Mensajes: 6.987
Antigüedad: 22 años, 11 meses
Puntos: 61
Me alegro de que te haya servido!
__________________
Cómo escribir

No hay pregunta tonta, sino tonto que quiere seguir en la ignorancia.
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 18:26.