Cerca su HostingTalk.it(puoi inserire qualsiasi parola, termine, azienda, espressione). Scrivi e premi INVIO!
Loading

+ Rispondi alla Discussione
Risultati da 1 a 4 di 4
  1. #1
    Nuovo utente
    Data Registrazione
    Oct 2009
    Messaggi
    2

    ciclo su options select

    Chiedo aiuto per questo problema: ho due select create dinamicamente. Quando seleziono il valore dalla selectA i valori nella selectB cambiano (il tutto con ajax e php).

    Se seleziono con il mouse il valore del selectA i valori di selectB cambiano correttamente.

    A volte ho bisogno di far fare questa operazione in automatico, senza che la faccia l'utente.

    Ho creato uno script js che funziona in parte.

    Frammento di codice modifybar.js:

    Codice:
    var n=document.getElementById("user_category");
    var m=document.getElementById("type_barrier");
    var y=0;
    var found=false;
    while (!found){
        y=y+1;
        n.selectedIndex=y;
        loadList('type_barrier',getSelected(n));
        alert("ciao");
        for (x=1; x<m.length; x++){
            m.selectedIndex=x;
            if (m.value==vc){
                found=true;
                break;
            }
        }
    }
    La funzione loadList e':

    Codice:
    var xmlHttp = getXmlHttpObject();
    
    function loadList(tb, id){
        xmlHttp.open('GET', 'request.php?table='+tb+'&id='+id, true);
        xmlHttp.onreadystatechange = stateChanged;
        xmlHttp.send(null);
    }
    function addOption(select, value, text) {
        var option = document.createElement("option");
        option.value = value+'§'+text,
        option.text = text;
        try {
            select.add(option, null);
        } catch(e) {
            // For Internet Explorer
            select.add(option);
        }
    }
    function getSelected(select) {
        // Return <option> value selected
        return select.options[select.selectedIndex].value;
    }
    function stateChanged() {
        if(xmlHttp.readyState == 4) {
            // State OK
            if (xmlHttp.status == 200) {
                var resp = xmlHttp.responseText;
                if(resp) {
                    // Couple of value into answer string are separated from ;
                    var values = resp.split(';');
                    // First element is list ID
                    var listId = values.shift();
                    var select = document.getElementById(listId);
                    select.disabled=false;
                    // Delete old values
                    while (select.options.length) {
                        select.remove(0);
                    }
    
                    if(listId == 'user_category') {
                        addOption (select, 0, '-- Select user --');
                    }
                    else {
                        addOption (select, 0, '-- Select barrier --');
                    }
                    var limit = values.length;
    
                    for(i=0; i < limit; i++) {
                        var pair = values[i].split('|');
                        addOption(select, pair[0], pair[1]);
                    }
                }
            } else {
                alert(xmlHttp.responseText);
            }
        }
    }
    
    function getXmlHttpObject()
    {
        var xmlHttp=null;
        try
        {
            // Firefox, Opera 8.0+, Safari
            xmlHttp=new XMLHttpRequest();
        }
        catch (e)
        {
            // Internet Explorer
            try
            {
                xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
            }
            catch (e)
            {
                xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
            }
        }
        return xmlHttp;
    }
    I miei problemi sono 2:

    PROBLEMA1: se da modifybar.js lascio alert("ciao") lo script funziona. Siccome l'alert non lo vorrei (era stato messo in fase di debug per verificarne il comportamento) l'ho tolto ma lo script mi cicla su tutti i valori delle due select e per ogni voce di selectA mi lancia due alert vuoti.

    PROBLEMA2: loadList ho dovuto richiamarla a mano perche' con il ciclo di modifybar.js l'evento onchange nella selectA che richiama loadList non va.

    Attendo con fiducia!

    Un saluto da un nuovo utente.
    Ultima modifica di ale; 06-11-2009 alle 22:33 Motivo: codice formatto e aggiunto i code tags



  2. #2
    ale
    ale non è collegato
    Webbologo L'avatar di ale
    Data Registrazione
    Jun 2009
    Località
    Vienna
    Messaggi
    169

    Re: ciclo su options select

    Citazione Originariamente Scritto da scarec Visualizza Messaggio
    PROBLEMA1: se da modifybar.js lascio alert("ciao") lo script funziona. Siccome l'alert non lo vorrei (era stato messo in fase di debug per verificarne il comportamento) l'ho tolto ma lo script mi cicla su tutti i valori delle due select e per ogni voce di selectA mi lancia due alert vuoti.
    Credo il problema sia che la richiesta che invii è una asincrona, quindi loadList() ti torna subito e non aspetta la risposta del server come facesse quando c'è l'alert (sempre se non clicchi subito ok). Penso che dovresti mettere il for loop dentro di stateChanged().

    Citazione Originariamente Scritto da scarec Visualizza Messaggio
    PROBLEMA2: loadList ho dovuto richiamarla a mano perche' con il ciclo di modifybar.js l'evento onchange nella selectA che richiama loadList non va.
    Settare il valore tramite il codice non lancia l'evento.


    Citazione Originariamente Scritto da scarec Visualizza Messaggio
    Un saluto da un nuovo utente.
    Benvenuto

  3. #3
    Nuovo utente
    Data Registrazione
    Oct 2009
    Messaggi
    2

    Re: ciclo su options select

    Mi potresti fare un esempio di for loop per aspettare che si riceva la risposta dal server?

    Grazie.

  4. #4
    ale
    ale non è collegato
    Webbologo L'avatar di ale
    Data Registrazione
    Jun 2009
    Località
    Vienna
    Messaggi
    169

    Re: ciclo su options select

    Non capisco tanto cosa intendi col primo di codice e cosa fai con la variabile found. Però se il for si rifersica ai dati ricevuto via AJAX lo dovresti eseguire in stateChanged().

Discussioni Simili

  1. Vmware automatizza il ciclo di vita delle macchine virtu
    Di Redazione HostingTalk nel forum Hosting e dintorni
    Risposte: 0
    Ultimo Messaggio: 08-04-2008, 07:10

Informazioni Discussione

Utenti che Stanno Visualizzando Questa Discussione

Ci sono attualmente 1 utenti che stanno visualizzando questa discussione. (0 utenti e 1 ospiti)

Tag per Questa Discussione

Segnalibri

Permessi di Scrittura

  • Tu non puoi inviare nuove discussioni
  • Tu non puoi inviare risposte
  • Tu non puoi inviare allegati
  • Tu non puoi modificare i tuoi messaggi