Visualizzazione dei risultati da 1 a 10 su 10

Discussione: select dinamiche

  1. #1

    select dinamiche

    ho fatto una ricerca e spulciato alcuni vecchi post, ma non riesco ancora a fare cio' che voglio...

    ho necessita' di aggiornare una select in base al valore scelta in un'altra...

    entrambe popolate da db...

    quello che non riesco e' evitare di aggiornare la pagina, perche' l'unico modo che ho visto fin'ora, e' mettendo
    codice:
    <select onchange="nomeform.submit();" name="valoreselect1">
    esiste un modo per evitare questo?

  2. #2
    Moderatore di ASP e MS Server L'avatar di Roby_72
    Registrato dal
    Aug 2001
    Messaggi
    19,559
    Non ne conosco altri.

    Roby

  3. #3
    azz

    ps.grazie

  4. #4
    Utente di HTML.it L'avatar di kluster
    Registrato dal
    Jul 2003
    Messaggi
    1,288
    si ma questo è javascript, preso da qualche parte qui su html.it dalla mailing list un javascript a settimana:
    codice:
    <script language="javascript" type="text/javascript">
    var valoridb = new Object();
    valoridb["primo"] =       [
    	{value:$chiave1, text:$text1},
            {value:$chiave2, text:$text2},
            {value:$chiave3, text:$text3},
            {value:$chiave4, text:$text4},
            {value:$chiave5, text:$text5},
    	];
    valoridb["secondo"] =       [
    	{value:$chiave1, text:$text2},
            {value:$chiave2, text:$text2},
            {value:$chiave1, text:$text1},
            {value:$chiave1, text:$text1},
            {value:$chiave1, text:$text1},
    	];
    // ...... valoridb["terzo"]......
    function createSelect(chooser,formElement) 
    {
    	var newElem;
        var where 		= (navigator.appName == "Microsoft Internet Explorer") ? -1 : null;
        var cityChooser = chooser.form.elements[formElement];
        while (cityChooser.options.length) 
    	{
            cityChooser.remove(0);
        }
        var choice		= chooser.options[chooser.selectedIndex].value;
        var db 			= valoridb[choice];
        newElem 		= document.createElement("option");
        newElem.text 	= "selezionare un valore dalla select che trovate sopra";
        newElem.value 	= "";
        cityChooser.add(newElem, where);
        if (choice != "") 
    	{
            for (var i = 0; i < db.length; i++) 
    		{
                newElem 		= document.createElement("option");
                newElem.text 	= db[i].text;
                newElem.value 	= db[i].value;
                cityChooser.add(newElem, where);
    		}
    	}
    }
    </script>
    poi nell'html

    <select name="NOMECHETIPARE" onchange="createSelect(this,'selectdariempire')">

    <option value="primo">PRIMO</option>
    <option value="secondo">SECONDO</option>
    </select>

    <select name="selectdariempire">
    <option value="">selezionare un valore dalla select che trovate sopra</option>
    </select>
    [/CODE]
    Ora il lavoro che ti tocca è valorizzare la strin=ga javascript
    di cui sopra con la tabella principale e mettere al posto di $chiave1 e $text1 i valori della tabella correlata con loop annidati o filtrando via via il recordset
    ESEMPIO (tralasciando la creazione di oggetti connection ed altre cavolate :
    codice:
    <script language="javascript" type="text/javascript">
    <%   RsFirst.Open "Select keyTipologia,tipologia from tabella_tipologie_prodotti order by tipologia",Connection,2,3
         RsSecond.Open "Select keyProdotto,nomeProdotto,idTipologia from tabella_prodotti",Connection,2,3
         while not RsFirst.eof %>
    	 valoridb[<%=RsFirst("keyTipologia")%>] =       [
         <% RsSecond.filter = "idTipologia = " & RsFirst("keyTipologia")
    	 	k = 0
            while not RsSecond.eof 
    			if k = 0 then 
    			   outPutJs = outPutJs & "{value:" & RsSecond("keyProdotto") & ", text:'" & RsSecond("nomeProdotto") & "'}" & vbcrlf
    			else
    			   outPutJs = outPutJs & ",{value:" & RsSecond("keyProdotto") & ", text:'" & RsSecond("nomeProdotto") & "'}" & vbcrlf
    			end if 
           		RsSecond.movenext
    			k = k + 1 
            wend 
            RsSecond.Filter = "" : Response.write outPutJs : outPutJs = ""  %>
            ];
    <% RsFirst.movenext
       wend
    %>
    function createSelect(chooser,formElement) 
    {
    	var newElem;
        var where 		= (navigator.appName == "Microsoft Internet Explorer") ? -1 : null;
        var cityChooser = chooser.form.elements[formElement];
        while (cityChooser.options.length) 
    	{
            cityChooser.remove(0);
        }
        var choice		= chooser.options[chooser.selectedIndex].value;
        var db 			= valoridb[choice];
        newElem 		= document.createElement("option");
        newElem.text 	= "selezionare un valore dalla select che trovate sopra";
        newElem.value 	= "";
        cityChooser.add(newElem, where);
        if (choice != "") 
    	{
            for (var i = 0; i < db.length; i++) 
    		{
                newElem 		= document.createElement("option");
                newElem.text 	= db[i].text;
                newElem.value 	= db[i].value;
                cityChooser.add(newElem, where);
    		}
    	}
    }
    </script>
    
    <select name="NOMESELECT" onchange="createSelect(this,'selectdariempire')">
    <% RsFirst.movefirst
       while not RsFirst.eof %>
       		<option value="<%=RsFirst("keyTipologia")%>"><%=Rs("tipologia")%></option>		
    <% 		RsFirst.movenext
       Wend
    %>
    </select>
    
    <select name="selectdariempire">
      <option value="">selezionare un valore dalla select di sopra</option>
    </select>
    Ora magari se ci sono veramente tanti dati ti conviene magari usare loop annidati tra due recordset creati con
    il metodo execute dell'oggetto connection (e quindi la pagina risulta + veloce da caricare) o se è una select che ti porti dietro nella
    navigazione metti l'output js in una variabile di sessione (a questo punto devi accodare l'intero output nella variabile e mai resettarla)
    P.s perdonami se ho tralasciato qualcosa , l'importante è che hai capito il concetto e le fasi da sviluppare

  5. #5
    ... ed e' possibile invece,
    farlo in una popup?
    mi spiego..

    nella pagina principale ho un bottone scegli
    -premo, mi si apre una popup, con due select dinamiche
    -scelgo il valore della prima, in base al quale refresho la popup e aggiorno i valori della seconda select..
    -scelgo la seconda
    -la popup si chiude e passo il valore della prima e della seconda select, alla pagina pricipale
    -il valore passato viene messo in una textbox

    e' possibile? mi sembra un po' macchinosa pero'... non saprei fare altrimenti....

    forse pero' faccio prima a salvare tutto il form, e ricaricare direttamente la pagina pricipale.... tanto sono una quindicina di campi...

    che dici Roby?

  6. #6
    Originariamente inviato da kluster
    si ma questo è javascript, preso da qualche parte qui su html.it dalla mailing list un javascript a settimana.......

    andiamo sul complicato qui...
    ci capisco poco...domani studio con calma anche questo...ora son fuso
    grazie

  7. #7
    Gulp.........il metodo che usi tu, di fare un submit() provvisorio che aggiorna la pagina in corrispondenza dell'evento onchange, secondo me va benissimo.........devi solo avere l'accortezza di mettere una serie di

    request.form("campi")

    ad inizio pagina per non perdere i valori già inseriti nel form al momento dell'aggiornamento, e poi di fare l'invio finale dei dati completi attraverso una funzione javascript in cui metti l'indirizzo della pagina che dovrà ricevere i dati (anzichè metterlo nel tag form, in modo che il submit() provvisorio aggiorni la pagina corrente e non vada a quella di destinazione)
    E' nato www.lombardiamotori.it

    www.universocase.it: il primo portale italiano di annunci immobiliari gratuiti e autogestiti!

  8. #8
    .... ma non sono Roby, chiedo umilmente scusa.............



    E' nato www.lombardiamotori.it

    www.universocase.it: il primo portale italiano di annunci immobiliari gratuiti e autogestiti!

  9. #9
    Originariamente inviato da teorema55
    .... ma non sono Roby, chiedo umilmente scusa.............



    eheehh
    ci mancherebbe

  10. #10

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.