Visualizzazione dei risultati da 1 a 3 su 3

Discussione: tre select dipendenti.

  1. #1

    tre select dipendenti.

    Buoniorno a tutti :-)

    è possibile fare tre select dipendenti in modo tale che

    >scelta la regione nella prima select
    >nella seconda appaiono le relative provincie, e quindi, scelta la provincia
    >nella terza select appaiano i relativi comuni?

    buh!

    link, script, testi da leggere, qualsiasi cosa :-)

    io con due ci sono riuscito...
    ma è che non sono affatto bravo con javascript e quindi non riesco ad aggiungere il terzo...

    grazie a tutti.

  2. #2
    Un vecchio esempio da sviluppare e completare
    codice:
    <script language="javascript">
    //	Create arrays containing Regioni, Province, Comuni
    //	Note: These arrays could be created dynamically
    
    arr0 = ["Torino", "Asti"]
    arr00 = ["Torino","Maglione","Massello","Bosconero","Bonzo"]
    arr01 = ["Asti","Maretto","Tonico","Quaranti"]
    
    arr1 = ["Milano", "Brescia", "Como", "Pavia"]
    arr10 = ["Milano","Rozzano","Sesto San Giovanni","Arcore"]
    arr11 = ["Brescia","Cerveno","Ossimo","Raffa"]
    arr12 = ["Como","Lomazzo","Maggio"]
    arr13 = ["Pavia","Stradella","Gerenzago","Landriano"]
    
    arr2 = ["Roma", "Frosinone", "Viterbo"]
    arr20 = ["Roma","Nettuno","Bracciano","Ariccia"]
    arr21 = ["Frosinone","Strangolagalli","Supino"]
    arr22 = ["Viterbo","Orte","Tarquinia"]
    
    var arrReg
    arrReg = [arr0, arr1, arr2]
    
    //	Function to handle dynamically altering the contents of the Reg List box
    function RegChange(newDisplay)
    {	var RegSelect, ProSelect, ComSelect, NumEntries, i
    	RegSelect = document.nav.Reg
    	ProSelect = document.nav.Pro
    	ComSelect = document.nav.Com
    
    	//	Azzero Province
    	for (i = ProSelect.length; i > 0; i--) { ProSelect.options[i-1] = null }
    
    	//	Aggiungi Commento
    	ProSelect.options[0] = new Option("-- Seleziona la Provincia --",-1)
    
    	//	If Reg is selected add its Province to the Province List box
    	if (newDisplay >= 0)
    	{	NumEntries = arrReg[newDisplay].length
    		for (i = 1; i <= NumEntries; i++) {	ProSelect.options[i] = new  Option((arrReg[newDisplay])[i-1],(i-1))	}
    	}
    	ProSelect.selectedIndex = 0
    	ProChange()
    }
    
    //	Function to handle dynamically altering the contents of the Pro List box
    function ProChange(newDisplay)
    {	var RegSelect, ProSelect, ComSelect, NumEntries, i
    	RegSelect = document.nav.Reg
    	ProSelect = document.nav.Pro
    	ComSelect = document.nav.Com
    
    	//	Delete all entries in the Com list box
    	for (i = ComSelect.length; i > 0; i--) { ComSelect.options[i-1] = null }
    
    	//	Add comment option to Com List box
    	ComSelect.options[0] = new Option("-- Seleziona il Comune --",-1)
    
    	//	If Pro is selected add its Numeri to the Numeri List box
    	if (newDisplay >= 0)
    	{	tempNumeri = eval("arr"+RegSelect[RegSelect.selectedIndex].value+newDisplay) 
    		NumEntries = tempNumeri.length
    		for (i = 1; i <= NumEntries; i++) { ComSelect.options[i] = new Option(tempNumeri[i-1],i-1) }
    	}
    	ComSelect.selectedIndex = 0
    }
    
    function vai() {
    	RegSelect = document.nav.Reg
    	ProSelect = document.nav.Pro
    	ComSelect = document.nav.Com
    	p1 = RegSelect[RegSelect.selectedIndex].value
    	p2 = ProSelect[ProSelect.selectedIndex].value
    	p3 = ComSelect[ComSelect.selectedIndex].value
    //	alert(""+p1+","+p2+","+p3)
    	if (p1>=0&&p2>=0&&p3>=0) {
    		n1 = RegSelect[RegSelect.selectedIndex].text
    		n2 = ProSelect[ProSelect.selectedIndex].text
    		n3 = ComSelect[ComSelect.selectedIndex].text
    		newURL = "http://my.server.it/"+n1+"/"+n2+"/"+n3+".htm"
    		alert(newURL)
    //		window.open(newURL)
    	} else {
    		alert("Scelta incompleta")
    	}
    }
    
    </script>
    
    <form name="nav" action="javascript:vai(this);">
          <table>
            <tr>
              <td class="TEXT"><font face="Arial" size="2">Regione:</font></td>
              <td class="TEXT">
                <select name="Reg" onChange="RegChange(this[this.selectedIndex].value)">
                  <option value="-1">-- Seleziona la Regione -- 
                  <option value="0">Piemonte 
                  <option value="1">Lombardia 
                  <option value="2">Lazio 
                </select>
              </td>
            </tr>
            <tr>
              <td class="TEXT"><font face="Arial" size="2">Provincia:</font></td>
              <td class="TEXT">
                <select name="Pro" onChange="ProChange(this[this.selectedIndex].value)">
                  <option value="-1">-- Seleziona la Provinia -- 
                </select>
              </td>
            </tr>
            <tr>
              <td class="TEXT"><font face="Arial" size="2">Comune:</font></td>
              <td class="TEXT">
                <select name="Com">
                  <option value="-1">-- Seleziona il Comune -- 
                </select>
              </td>
            </tr>
            <tr>
              <td class="TEXT"><font face="Arial" size="2"></font></td>
              <td class="TEXT">
                <input type=submit>
              </td>
            </tr>
          </table>
    </form>
    <script language="javascript">
    // questa va eseguito dopo la definizione del form per azzerare i menu
    RegChange(-1)
    </script>
    Pero' non credo che ti convenga spedire una pagina contenente tutti i 14578 comuni e localita' d'italia... forse e' meglio svilupparlo lato server

  3. #3

    ma se sono tanti....

    Ciao, grazie per avermi risposto.

    Ho provato la tua soluzione, ed è fantastica.

    Adesso ho un'altro problema: i comuni sono più di 8000...
    quindi se carico tutto in un colpo, tra comuni, provincie e le venti regioni... ci mette un casino di tempo la pagina a caricarsi.

    Ho visto che qualcuno fa una specie di Preload con tanto di barra di progresso, facendo caricare solo le provincie della regione e i comuni della provincia successivamente scelta.

    Sapete darmi indicazioni anche a riguardo?

    grazie,
    Luca

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.