Visualizzazione dei risultati da 1 a 9 su 9
  1. #1
    Utente di HTML.it L'avatar di beat111
    Registrato dal
    Oct 2001
    Messaggi
    160

    Interazione tra due combobox

    Ho due combobox.

    Nella prima, chiamata "categorie", inserisco 3 voci: alberghi, ristoranti, agriturismo.

    Cliccando sulla voce alberghi, nella seconda combobox, chiamata "operatori", compaiono le voci: "albergo1", "albergo 2", etc.

    Cliccando sulla voce "albergo1" carico un swf esterno dentro un clip istanziato "vuoto".

    Stessa cosa se clicco sulle altre categorie.

    Mi piacerebbe poter aggiornare e incrementare queste voci senza aprire flash, ma modificando un file xml che deve quindi popolare entrambe le combobox.

    Potrei anche inserire manualmente in flash solo le voci relative alle categorie: in tal caso al clic sulla voce "alberghi", ad esempio, dovrei leggere dal file xml solo le voci "albergo1", "albergo 2", etc. nella seconda combobox. Stessa cosa se clicco sulle altre categorie.

    È una cosa complicata? Io sto perdendoci la testa da due settimane, ma non riesco a venirne a capo...
    Qualcuno può darmi una dritta?
    Gianni

  2. #2
    si può fare tranqullamente sia prendere valori da un file esterno xml che impostare i valori della seconda combobox a seconda del valore scelto nella prima....ti basta fare una piccola ricerca nel forum che ci sono diversi 3d che parlano di questo ...
    uno dei tanti
    http://forum.html.it/forum/showthrea...light=combobox

    ciao
    la verità non è una meretrice che si getta al collo di chi non la vuole ma anzi essa è dotata di una così altera bellezza che anche chi sacrifica tutto per ottenerla non è sicuro di averla raggiunta !

  3. #3
    Utente di HTML.it L'avatar di beat111
    Registrato dal
    Oct 2001
    Messaggi
    160
    Ho cercato e letto tutto quello che c'era da leggere, anche in altre lingue, ma sono tutti esempi limitati ad una solo combobox e laddove c'era l'interazione tra i due components il "popolamento" era sempre gestito all'interno del filmato (come l'esempio che mi hai linkato e che conosco bene).
    Complice la mia scarsa padronanza di AS2 mi manca quel passo in avanti per far interagire i due "codici" che caricano l'xml esternamente oppure i "data" della prima component caricati a mano e i "data" della seconda caricati via xml...

  4. #4
    x il popolamento ...cioè per popolare una combo da un file esterno xml
    vediamo un pò con un es concreto....

    supponendo che hai un file xml così fatto
    Codice PHP:
    <Nome id="1"/><item>prima voce</item>
    <
    Nome id="2"/><item>seconda voce</item>
    <
    Nome id="3"/><item>terza voce</item>
    <
    Nome id="4"/><item>quarta voce</item>
    <
    Nome id="5"/><item>quinta voce</item
    chiamiamolo creaCombo.xml

    nel filmato flash metti il componente sullo stage ci metti come nome istanza prova e mettei sul frame

    Codice PHP:
    System.useCodepage true;
    filexml "creaCombo.xml";

    ApriXML();
    function 
    ApriXML () {

        
    _root.loading "Connecting to Data Base for XML data...";
        
    mioxml = new XML();
        
    myarray = new Array();
        
    mioxml.load(filexml)
        
    //mioxml.load(filexml + "&rnd=" + random(999999));
        
    mioxml.onLoad ElaboraXML;
        function 
    ElaboraXML (success) {
            if (
    mioxml.loaded) {

                
    myarray mioxml.childNodes;
                
    Dati();
                
    CreaCombo();
                
    delete myarray;
                
    delete mioxml;
                }
                                       };
    };




    // Funzione che prende i dati XML e li mette in degli Array
    function Dati () {

    // Array che contengono i Dati -----------------------
        
    idItem = new Array();
        
    item = new Array();
    // ---------------------------------------------------

        
    for (k=0k<=myarray.lengthk++) {
            if (
    myarray[k].nodeName == "Nome") {
                
    idItem.push(myarray[k].attributes.id);
            } else if (
    myarray[k].nodeName == "item") {
                
    item.push(myarray[k].childNodes.toString());
            }  
        };

    };
    // funzione che mette i dati presi dal file xml nella combo
    function CreaCombo(){
        
    trace(item)
        
    prova.addItem("");
        for (
    i=0i<idItem.lengthi++){
            
    prova.addItem(item[i]);
        }
    }
    // x controllare la combo
    listenerObject = new Object();
    listenerObject.change = function(eventObject){
    // Inserire qui il codice
    var obj prova.selectedItem;
    trace("È stato selezionato il valore: " obj.label);
    selezione=obj.label
     
    }
    prova.addEventListener("change"listenerObject

    ora x l'interazione basta che ti rifai agli altri es trovati nei vari 3d
    la verità non è una meretrice che si getta al collo di chi non la vuole ma anzi essa è dotata di una così altera bellezza che anche chi sacrifica tutto per ottenerla non è sicuro di averla raggiunta !

  5. #5
    Utente di HTML.it L'avatar di beat111
    Registrato dal
    Oct 2001
    Messaggi
    160
    Facciamo così, se ti va. Ti allego quello che ho fatto finora. Vedrai che il secondo combobox lo popolo da flash e non da xml ed è proprio quello che invece vorrei fare.
    Idee?

    >> Allegato

  6. #6
    guarda ....scusami ma il tempo di vedere i file e metteremi a sbariare è davvero poco quindi senza vedere il tuo file ti dico che...
    nel file xml puoi anche mettere il valore associato alla label in questo modo

    prova.addItem({data:idItem[i], label:item[i]});

    quindi ti basta mettere magari il nome del file xml da chiamare x popolare la seconda combo quando viene effettuata una scelta ...

    // x controllare la combo
    listenerObject = new Object();
    listenerObject.change = function(eventObject){
    // Inserire qui il codice
    var obj = prova.selectedItem;
    trace("È stato selezionato il valore: " + obj.label);
    trace("richiamo per la seconda combo il file xml "+obj.data)
    selezione=obj.label
    }
    prova.addEventListener("change", listenerObject)

    la verità non è una meretrice che si getta al collo di chi non la vuole ma anzi essa è dotata di una così altera bellezza che anche chi sacrifica tutto per ottenerla non è sicuro di averla raggiunta !

  7. #7
    Utente di HTML.it L'avatar di beat111
    Registrato dal
    Oct 2001
    Messaggi
    160
    Oddio, e dove devo inserire il codice che mi hai scritto?

  8. #8
    Originariamente inviato da beat111
    Oddio, e dove devo inserire il codice che mi hai scritto?
    nel ciclo quando popoli la combo...

    in questa funzione
    function CreaCombo(){
    trace(item)
    prova.addItem("");
    for (i=0; i<idItem.length; i++){
    //prova.addItem(item[i]);
    prova.addItem({data:idItem[i], label:item[i]});
    }
    }

    quindi hai nel valore della prima combo anche i nomi degli altri file xml da richiamare e popolare la seconda combo
    ora ti basta duplicare il cod e metterlo sul secondo frame e popoli la seconda combo...dai che funge ho appena provato a fare una cosa del genere

    quindi primo frame lo script che ti ho postato leggi i dati dal file xml quando avviene una scelta fai spostare la testina sul secondo frame dove leggi il file scelto dal valore della prima combo
    ...
    supponendo che nel primo file xml creacombo.xml ci siano questi dati
    Codice PHP:
    <Nome id="primo"/><item>prima voce</item>
    <
    Nome id="secondo"/><item>seconda voce</item>
    <
    Nome id="terzo"/><item>terza voce</item>
    <
    Nome id="quarto"/><item>quarta voce</item>
    <
    Nome id="quinto"/><item>quinta voce</item
    dove primo, secondo....sono i nomi dei file xml che popoleranno la seconda combo
    sullo stage hai la prima combo istanziata prova e sul primo frame
    Codice PHP:
    stop();

    this._lockroot=true;
    //fscommand ("allowscale", "false");
    System.useCodepage true;
    filexml "creaCombomio.xml";


    ApriXML();
    function 
    ApriXML () {

        
    mioxml = new XML();
        
    myarray = new Array();
        
    mioxml.load(filexml)
        
    mioxml.onLoad ElaboraXML;
        function 
    ElaboraXML (success) {
            if (
    mioxml.loaded) {

                
    myarray mioxml.childNodes;
                
    Dati();
                
    CreaCombo();
                
    delete myarray;
                
    delete mioxml;
                }
                                       };
    };




    // Funzione che prende i dati XML e li mette in degli Array
    function Dati () {

    // Array che contengono i Dati -----------------------
        
    idItem = new Array();
        
    item = new Array();
    // ---------------------------------------------------

        
    for (k=0k<=myarray.lengthk++) {
            if (
    myarray[k].nodeName == "Nome") {
                
    idItem.push(myarray[k].attributes.id);
            } else if (
    myarray[k].nodeName == "item") {
                
    item.push(myarray[k].childNodes.toString());
            }  
            
    //trace(Dettaglio)
                        
        
                                            
    };

    };
    // funzione che mette i dati nella combo
    function CreaCombo(){
        
    trace(item)
        
    prova.addItem("");
        for (
    i=0i<idItem.lengthi++){
            
    //prova.addItem(item[i]);
            
    prova.addItem({data:idItem[i], label:item[i]});
        }
    }

    listenerObject = new Object();
    listenerObject.change = function(eventObject){
    // Inserire qui il codice
    var obj prova.selectedItem;
    trace("È stato selezionato il valore: " obj.label);
    trace("richiamo per la seconda combo il file xml "+obj.data)

    chi=obj.data
    //trace(selezione)
    gotoAndStop(2);
     }
    prova.addEventListener("change"listenerObject
    poi sul secondo frame hai la seconda combo, istanziata prova1, che popoli di volta in volta con i dati passati dal file xml scelto nella prima combo
    sul secondo frame avrai la lettura del file scelto
    Codice PHP:
    stop();
    System.useCodepage true;
    filexml1 chi+".xml";


    ApriXML1();
    function 
    ApriXML1 () {

        
    _root.loading "Connecting to Data Base for XML data...";
        
    mioxml = new XML();
        
    myarray = new Array();
        
    mioxml.load(filexml1)
        
    //mioxml.load(filexml + "&rnd=" + random(999999));
        
    mioxml.onLoad ElaboraXML;
        function 
    ElaboraXML (success) {
            if (
    mioxml.loaded) {

                
    myarray mioxml.childNodes;
                
    Dati1();
                
    CreaCombo1();
                
    delete myarray;
                
    delete mioxml;
                }
                                       };
    };




    // Funzione che prende i dati XML e li mette in degli Array
    function Dati1 () {

    // Array che contengono i Dati -----------------------
        
    idItem1 = new Array();
        
    item1 = new Array();
    // ---------------------------------------------------

        
    for (k=0k<=myarray.lengthk++) {
            if (
    myarray[k].nodeName == "Nome") {
                
    idItem1.push(myarray[k].attributes.id);
            } else if (
    myarray[k].nodeName == "item") {
                
    item1.push(myarray[k].childNodes.toString());
            }  
            
    //trace(Dettaglio)
                        
        
                                            
    };

    };
    // funzione che mette i dati nella combo
    function CreaCombo1(){
        
    trace(item1)
        
    prova1.addItem("");
        
        for (
    i=0i<idItem1.lengthi++){
            
            
    prova1.addItem({data:idItem1[i], label:item1[i]});
        }
    }

    listenerObject1 = new Object();
    listenerObject1.change = function(eventObject){
    // Inserire qui il codice
    var obj prova1.selectedItem;
    trace("È stato selezionato il valore: " obj.label);
    trace("richiamo per la seconda combo il file xml "+obj.data)

    selezione=obj.data
    trace
    (selezione)
     }
    prova1.addEventListener("change"listenerObject1
    ovviamente ora dovresti solo vedere il fatto che cambiando altre voci come reagisce
    e fare un controllo ...
    la verità non è una meretrice che si getta al collo di chi non la vuole ma anzi essa è dotata di una così altera bellezza che anche chi sacrifica tutto per ottenerla non è sicuro di averla raggiunta !

  9. #9
    beh sta anche a te sbariare un pochettino.....
    cmq il risultato qua
    http://www.leonardoinformatica.it/xf...bo/comboM.html



    ps fungono solo le prime due voci dato che ci sono solo tre xml...
    la verità non è una meretrice che si getta al collo di chi non la vuole ma anzi essa è dotata di una così altera bellezza che anche chi sacrifica tutto per ottenerla non è sicuro di averla raggiunta !

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.