Select in cascata

PiccolaAnimaBlu

Nuovo Utente
11 Giu 2010
10
0
0
Sto realizzando un sito web che permette di uplodare degli 'oggetti' e di catalogarli.
Le categorie sono organizzate in 5 categorie principali ed ognuna di questa ha delle sottocategorie e così via.
Voglio realizzare nell'html delle select in successione a seconda delle scelte fatte dall'utente.
Ho utilizzato javascript e una servlet java per ottenere questo effetto, ma mi sono resa conto che non è proprio quello che desideravo. Ho notato che su Firefox l'evento si scatena solo al secondo click, mentre su IE funziona correttamente, ma solo sulla prima select.

Posto di seguito parte del codice realizzato.


Questa è la servlet java che scrive il codice html per la select (da visualizzare dinamicamente)
Codice:
            //prendere il valore della select, che sappiamo essere l'id di una categoria
            int id = Integer.parseInt(request.getParameter("idcategoria"));
            //controllo se esiste già dbcategorie se no lo creo
            DatabaseCategorie DBcategorie = (DatabaseCategorie) getServletContext().getAttribute("DBcategorie");
            if(DBcategorie==null){
                DBcategorie = new DatabaseCategorie();
                getServletContext().setAttribute("DBcategorie", DBcategorie);
             }
           //l'id che arriva alla servlet deve essere != 0. Se è = 0, significa che ho il valore select category e tutto questo ambaradam non lo faccio
           if(id!=0){
           if(DBcategorie.getCategorieFiglie(id).size()>0){
           int numero = DBcategorie.getCategorieFiglie(id).get(0).getIdcategoria();
            //stampo il codice html(la mia select)
            out.print("<p>");
            out.print("<select name='idcategoria' id='idcategoria' onchange='javascript:visualizzaselect("+numero+")'>");
            out.print("<option value='0' selected='selected'>Select category </option>");
            for(Categoria c : DBcategorie.getCategorieFiglie(id)){
                out.println("<option value='"+c.getIdcategoria()+"'>"+c.getNome()+"</option>");
            }
            out.print("</select>");
            out.print("</p>");
            //out.print("<input type='hidden' name='numero' value='"+numero+"'>");
            out.print("<div id='idcategoria"+numero+"'/>");
           }

Questo è il file javascript che sull'evento change della prima select visualizzata prende il risultato della servlete
Codice:
function visualizzaselect(numeroid){

    //chiamo il metodo della servlet
    //metto un div per inserire la seconda select, subito dopo la prima
   //$("#idcategoria").after(" <div id='idcategoria'/>") ;

    $("select#idcategoria").change(function(){
        // gestore evento change della select
        //prendo il valore della select

        var input = $(this) ;

        $("div#idcategoria"+numeroid).load(
                "selectcascata?idcategoria="+input.val(),
                null,
                function(){}) ;


    }) ;

}

$(document).ready(visualizzaselect($("selec#idcategoria").val()));

e infine la pagina .jsp di visualizzazione
Codice:
if(DBcategorie.getCategorieFiglie(0).size()>0){
                            numero = DBcategorie.getCategorieFiglie(0).get(0).getIdcategoria();
                        }%>
                        <td><select id="idcategoria" name="idcategoria" onchange="javascript:visualizzaselect(<%=numero%>)">
                            <!-- la prima voce è 'select a category' con value 0, cosi l'utente fa per forza il click. se la value è 0 io non faccio l'upload-->
                            <option value="0" selected="selected">Select category</option>
                            <%
                            for(Categoria c : DBcategorie.getCategorieFiglie(0)){
                            //sul click prendo il valore e visualizzo le sottocategorie.
                            %><option value="<%=c.getIdcategoria()%>"><%=c.getNome()%></option> <%
                            }
                            %>
                           <!-- <option value="0">Other...</option>-->
                            </select>             
                            <div id="idcategoria<%=numero%>"/>

                        </td>

il metogo getCategorieFiglie() serve a prendere le figlie di una categoria conoscendo il suo id.
Ho creato anche un oggetto Categoria che ha come attributi il nome da visualizzare e l'id.
Al primo caricamento della pagina si visualizzano le 5 categorie principali, il div sottostante viene poi popolato con la funzione js visualizzacategorie()

Ringrazio chiunque voglia aiutarmi, sto sbattendo la testa contro google da giorni ma non ho trovato niente che faccia al mio caso!
 

PiccolaAnimaBlu

Nuovo Utente
11 Giu 2010
10
0
0
Mi rendo conto che il codice è un po' lungo e non è di facile lettura, ma qualcuno sa almeno dirmi se per firefox e internet explorer l'evento change è definito diversamente?

ho associato la stessa funzione della select anche all'evento click...ma su internet explorer la sitazione non cambia...
 

alessandro1997

Utente Attivo
6 Ott 2009
5.302
1
0
26
Roma
alessandro1997.netsons.org
Ad un'occhiata veloce nel file Javascript compare questa riga:
Codice:
$(document).ready(visualizzaselect($("selec#idcategoria").val()));
Che andrebbe cambiata con:
Codice:
$(document).ready(visualizzaselect($("select#idcategoria").val()));
 

PiccolaAnimaBlu

Nuovo Utente
11 Giu 2010
10
0
0
Almeno mi dai dei suggerimenti su come provare a cambiare un po' di cose.
ore ci provo...non capisco perchè su ie la funzione non va sulla seconda select che si crea automaticamente... :(
 
Discussioni simili
Autore Titolo Forum Risposte Data
A [PHP] select a cascata regione province e comuni PHP 5
H Select e Checkbox in cascata. PHP 29
L Ripetere Campi disabilitando input in riferimento ad un valore della select jQuery 0
otto9due Ordinare option di una select Javascript 5
W MySQL ciclo in SELECT MySQL 0
W MySQL SELECT list dinamica MySQL 0
M Select Option dentro una Table jQuery 2
G Colorare menu select attraverso ricerca php PHP 0
L problema con query select PHP 2
F menù select dinamico da db in php PHP 3
D popolare campi tra th alla select PHP 36
M Estrarre valore con SELECT COUNT PHP 0
M Creare un campo input select quantità di un numero intero prelevato dal db PHP 3
L Select Dinamiche...da txt? PHP 3
E Php select option e ajax PHP 23
R Select concatenata che non funziona la seconda volta Ajax 3
L select join e sottrazione punti PHP 13
L input dati con inser into select ? PHP 4
V hierarchy-select jQuery 0
Emix Select concatenate php sql ajax PHP 2
F query e form con select multipla PHP 17
T recupero valori select multipla da android Javascript 3
J php, scegliere autista da select e mostrare se ha fatto un incidente PHP 8
Tommy03 Select in ordine per numero di record MySQL 7
T problema con select dinamica con jquery Javascript 0
J Far comparire e scomparire un div con un select Javascript 1
M Opzioni select da 1 a 200 PHP 0
I Fatal error: Query Failed! SQL: SELECT * INTO OUTFILE PHP 1
C input in sostituzione della select PHP 2
G Insert into select - Aiuto MySQL 0
max1974 autocomplete trigger select jQuery 0
X [Select] Valori chiave non presenti in un'altra tabella MySQL 2
M Estrarre dati da una select HTML PHP 3
MarcoGrazia jquery validate, necessità di validare almeno un elemento select su due jQuery 1
T [PHP] Autocompilazione input multiple da una select PHP 1
Alex_70 [PHP] Visualizzare foto tramite select PHP 0
S [PHP] aggiornamento table tramite select senza ricaricare la pagina PHP 5
psicomia Gestione funzione in javascript in tabella richiamare"textarea" valori preimpostati in "select" Javascript 2
M [PHP] Problema con query select PHP 2
C [PHP] Controllo <select> comportamento anomalo PHP 2
G [PHP] Select con opzioni dipendenti da un'altra select PHP 3
L [Javascript] Select option in campi input Javascript 4
M [PHP] Problemi con select PHP 6
S [RISOLTO] aggiorna tabella da select option asp classic Classic ASP 7
S [ASP] SALVARE VALORE SELECT OPTION SU CAMPO TABELLA ACCESS Classic ASP 9
max1974 [Javascript] malfunzionamento select Javascript 0
M [PHP] Drop down in campo select PHP 1
D [PHP] Select dinamici PHP 2
G sql select con array in php PHP 1
L [PHP] Form da select compilare campi automaticamente PHP 1

Discussioni simili