Foros del Web » Creando para Internet » Flash y Actionscript »

Problema con combobox dependientes

Estas en el tema de Problema con combobox dependientes en el foro de Flash y Actionscript en Foros del Web. Estoy intentando hacer comboboxes dependientes que muestren los datos de un XML. De momento he logrado que el primer combobox cargue lo que quiero pero ...
  #1 (permalink)  
Antiguo 07/10/2008, 05:06
 
Fecha de Ingreso: mayo-2008
Mensajes: 163
Antigüedad: 15 años, 10 meses
Puntos: 1
Problema con combobox dependientes

Estoy intentando hacer comboboxes dependientes que muestren los datos de un XML. De momento he logrado que el primer combobox cargue lo que quiero pero hasta ahí.

De momento solo quiero que en el segundo combobox se cargue un texto dependiendo de lo que se seleccionó en el anterior, pero no me sale. A ver si podeis darme alguna pista de por donde tirar.

Este es el código:

Código actionscript:
Ver original
  1. miXML = new XML();
  2. miXML.ignoreWhite = true;//hace que los espacios en blanco no den problemas
  3. miXML.onLoad = almacenaProvincia;//la funcion se ejecuta al cargar el objeto XML
  4. miXML.load("bodegas.xml");//la ruta del XML
  5.  
  6. cbo_ciudad.enabled = false;//mantiene apagado el combobox de ciudad
  7. cbo_provincia.addEventListener("change", eventoComboBox);//escucha el combobox provincia y cuando cambia lanza el evento
  8. function eventoComboBox(evento) {
  9.     if(evento.target.selectedItem.data <= 0)//si el data de cbo_provincia es menor que 0...
  10.        almacenaCiudad(evento.target.selectedItem.data);//¿envia ese valor a la funcion almacenaCiudad?
  11.     else
  12.         cbo_ciudad.enabled = false;//Si no sigue igual
  13. }
  14.  
  15. function almacenaProvincia() {
  16.     aProvincia = new Array();
  17.     aProvincias = this.firstChild.childNodes;//carga los primeros hijos del XML en esta array
  18.     vTotal = aProvincias.length;//cuenta cuantos nodos hay
  19.     for (i=0; i<vTotal; i++) {
  20.         if(aProvincias[i].nodeName == "provincia") {//si el nombre del nodo es provincia...
  21.         aProvincia.push(aProvincias[i].attributes.pNombre);//almacena el atributo pNombre en esta array
  22.         }
  23.     }
  24.     cbo_provincia.dataProvider  = aProvincia;//carga los datos de la array en el combobox
  25. }
  26.  
  27. function almacenaCiudad(opc) {
  28.     aCiudad = new Array({label:"- Selecciona -", data:0});
  29.     if(opc == 1) {
  30.         aCiudad.push({label:"Funcionó"});
  31.     }else{
  32.         aCiudad.push({label:"No funcionó"});
  33.     }
  34.     cbo_ciudad.dataProvider = aCiudad;
  35.     cbo_ciudad.addEventListener("load", ciudadCargada);
  36.     cbo_ciudad.enabled = true;
  37. }
  38.  
  39. function ciudadCargada() {
  40.     cbo_ciudad.selectedIndex = 0;
  41. }

El código es una mezcla de dos tutoriales que encontré así que si algo que parece estar mal, seguramente esté mal

El plan es que lo que se cargue tras elegir opción en el primer combo sean más opciones (las ciudades correspondientes a la provincia seleccionada) pero de momento, si me podeís ayudar a diferenciar entre una provincia y otra, os estaría muy agradecido.
  #2 (permalink)  
Antiguo 07/10/2008, 06:24
Avatar de Mahalo  
Fecha de Ingreso: julio-2004
Ubicación: Mallorca (Illes Balears)
Mensajes: 1.121
Antigüedad: 19 años, 8 meses
Puntos: 12
Respuesta: Problema con combobox dependientes

En la función almacenaCiudad no recorres el XML ni rellenas la matriz aCiudad ni nada. Ahí te falta hacer lo mismo que haces en la función almacenaProvincia pero con otros parámetros para recorrer el XML, es deicr, extraer la ciudad en función de la provincia seleccionada.
__________________
Los ignorantes se empeñan en enseñar. Los sabios en aprender.
SourceForge
  #3 (permalink)  
Antiguo 08/10/2008, 02:50
 
Fecha de Ingreso: mayo-2008
Mensajes: 163
Antigüedad: 15 años, 10 meses
Puntos: 1
Respuesta: Problema con combobox dependientes

Ese es el problema, que no sé como decirle a la función almacenaCiudad() cual es la provincia seleccionada.

Con este codigo que pongo ahora logro que la función almacenaCiudad() reciba el valor "0" cuando en el primer combobox elijo la opción "- seleccione-". Pero eso lo consigo porque meto lo de "data" a mano. ¿Sabes cómo puedo hacer para asignar un valor de "data" a cada elemento de la array automaticamente? Es que sino no veo como avanzar.

Código actionscript:
Ver original
  1. cbo_ciudad.enabled = false;//mantiene apagado el combobox de ciudad
  2. cbo_provincia.addEventListener("change", eventoComboBox);//escucha el combobox provincia y cuando cambia lanza el evento
  3. function eventoComboBox(evento) {
  4.     if(evento.target.selectedItem.data == 0){//si el data de cbo_provincia es menor que 0...
  5.         almacenaCiudad(evento.target.selectedItem.data);//¿envia ese valor a la funcion almacenaCiudad?
  6.     }else{
  7.         cbo_ciudad.enabled = false;//Si no sigue igual
  8.     }
  9. }
  10.  
  11. function almacenaProvincia() {
  12.     aProvincia = new Array({label:"- Selecciona -", data:0});
  13.     aProvincias = this.firstChild.childNodes;//carga los primeros hijos del XML en esta array
  14.     vTotal = aProvincias.length;//cuenta cuantos nodos hay
  15.     for (i=0; i<vTotal; i++) {
  16.         if(aProvincias[i].nodeName == "provincia") {//si el nombre del nodo es provincia...
  17.         aProvincia.push(aProvincias[i].attributes.pNombre);//almacena el atributo pNombre en esta array
  18.         }
  19.     }
  20.     cbo_provincia.dataProvider  = aProvincia;//carga los datos de la array en el combobox
  21. }
  22.  
  23. function almacenaCiudad(opc) {
  24.     trace(opc);
  25.     aCiudad = new Array({label:"- Selecciona -", data:0});
  26.     aCiudades = miXML.firstChild.firstChild.childNodes;
  27.     vTotalCiudad = aCiudades.length;//cuenta cuantos nodos hay
  28.     trace (aCiudades);
  29.     for (i=0; i<=vTotalCiudad; i++){
  30.         if (aCiudades[i].nodeName == "ciudad")
  31.         aCiudad.push(aCiudades[i].attributes.cNombre);
  32.     }
  33.     cbo_ciudad.dataProvider = aCiudad;
  34.     cbo_ciudad.addEventListener("load", ciudadCargada);
  35.     cbo_ciudad.enabled = true;
  36. }
  #4 (permalink)  
Antiguo 09/10/2008, 06:07
 
Fecha de Ingreso: mayo-2008
Mensajes: 163
Antigüedad: 15 años, 10 meses
Puntos: 1
Respuesta: Problema con combobox dependientes

Hueeeep!!!

He conseguido avanzar mucho pero ahora estoy atorado en un punto un poco estúpido. Con el siguiente código debería mostrarse en pantalla el contenido del primer nodo de la array aDatos, pero en vez de eso aparece "null". Si borro lo de nodeValue, como con el segudo nodo, me da como resultado "<direccion>Dirección: direccion111</direccion>,", literalmente.
¿Tenéis alguna explicación?


Contenido de la array:
Código:
<nombre>Nombre: nombre111</nombre>,
<direccion>Dirección: direccion111</direccion>,
<telefono>Teléfono: telefono111</telefono>

Código que inexplicablemente no funciona:
Código:
function cargaTexto(opc3) {
	var correccion3 = opc3 - 1;
	aDatos = aEmpresas[correccion3].childNodes;
	txt_nombre.text = aDatos[0].nodeValue;
	txt_direccion.text = aDatos[1];
	txt_telefono.text = aDatos[2];
	trace(aDatos);
}
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 11:42.