Select concatenate impostare di default dato memorizzato

djjunior

Utente Attivo
24 Lug 2004
99
1
8
Carissimi,
ho trovato uno script in javascript che gestisce in select concatenate: regioni, comuni, prov e cap.
Ora, l'ho inserito in uno form che li memorizza nel db access. Nella pagina successiva, alla visualizzazione / modifica dei dati vorrei che le select di default mi impostino i dati precedentemente inseriti per poi eventualmente modificarli.
Ecco lo script
Codice:
function carica_regioni() {
    var a = document.getElementById('regione');
    var b = return_regioni();
    b = b.sort();
    document.getElementById('provincia').options.length = 0;
    document.getElementById('città').options.length = 0;
    document.getElementById('cap').options.length = 0;
    a.options[0] = new Option("Scegli Regione", "NULL");
    for (i = 0; i < b.length; i++) {
        var c = b[i].split(';');
        a.options[i + 1] = new Option(c[0], c[0])
    }
}
function carica_province() {
    var a = document.getElementById('provincia');
    var b = document.getElementById('regione').value;
    if (b == 'NULL') {
        a.options.length = 0
    } else a.options[0] = new Option("Scegli Provincia", "NULL");
    document.getElementById('città').options.length = 0;
    document.getElementById('cap').options.length = 0;
    var c = b[0];
    var d = b[1];
    var e = return_province(b);
    e = e.sort();
    for (i = 0; i < e.length; i++) {
        var f = e[i].split(';');
        a.options[i + 1] = new Option(f[0], f[1])
    }
}
function carica_città () {
    var select_field = document.getElementById('città');
    var regione = document.getElementById('regione').value;
    var sigla_provincia = document.getElementById('provincia').value;
    if (sigla_provincia == 'NULL') {
        select_field.options.length = 0
    } else select_field.options[0] = new Option("Scegli Città", "NULL");
    document.getElementById('cap').options.length = 0;
    var lista_comuni = return_comuni(sigla_provincia);
    for (i = 0; i < lista_comuni.length; i++) {
        var curr = lista_comuni[i].split(';');
        select_field.options[i + 1] = new Option(curr[1], curr[0])
    }
}
function carica_cap() {
    var a = document.getElementById('cap');
    var b = document.getElementById('regione').value;
    var c = document.getElementById('provincia').value;
    var d = document.getElementById('città').value;
    var e = return_cap(d).split(',');
    if (d == 'NULL') {
        a.options.length = 0
    } else a.options[0] = new Option("Scegli CAP", "NULL");
    for (i = 0; i < e.length; i++) a.options[i + 1] = new Option(e[i], e[i])
}
Ecco come li richiamo nel form principale di inserimento.
Codice:
<select name="regione" id="regione" onchange="carica_province();"></select>

<select name="provincia" id="provincia" onchange="carica_città();"></select>

<select name="città" id="città" onchange="carica_cap();"></select>

<select name="cap" id="cap"></select></select>
Premetto che i dati delle regioni etc sono file javascript a parte, quindi non utilizzano nessun db.
Grazie
G.
 
Ciao, dovresti riuscire a passare la scelta fatta come parametro alla funzione e utilizzarlo per impostare l'attributo selected alla option creata
un esempio con il tuo codice
HTML:
<select name="regione" id="regione"></select>
<script>
    carica_regioni("Campania");
    
    function return_regioni() {
        return ["Abruzzo;1","Campania;2","Molise;3","Sicilia;4"]
         
    }
    function carica_regioni(regione) {
        var a = document.getElementById('regione');
        var b = return_regioni();
        b = b.sort();
        a.options[0] = new Option("Scegli Regione", "NULL");
        for (i = 0; i < b.length; i++) {
            var c = b[i].split(';');
            a.options[i + 1] = new Option(c[0], c[0]);
            if(regione && regione == c[0]) {
                a.options[i + 1].selected = true;
            }
        }
    }
</script>
 
Era abbastanza complicato adattare tutto lo script , pertanto ho cambiato in altro, con DB access, asp e ajax.
In pratica però sono bloccato sul fatto che ora questo script di default deve prendere i dati dal db, ora per la regione, tutto ok, mentre per la provincia e i comuni noni funziona, ecco lo script:
Codice:
<script type="text/javascript" language="javascript">
var estrai_province;
var regione_spedizione
   
function cerca_province() 
{

regione_spedizione=document.form.regione_spedizione.options[document.form.regione_spedizione.selectedIndex].value
    // branch for native XMLHttpRequest object
    if (window.XMLHttpRequest) {
        estrai_province= new XMLHttpRequest();
        estrai_province.onreadystatechange = ricevi_province;
        estrai_province.open("GET", "estrai-province.asp?regione_spedizione="+regione_spedizione, true);
        estrai_province.send(null);
    // branch for IE/Windows ActiveX version
    } else if (window.ActiveXObject) {
        estrai_province= new ActiveXObject("Microsoft.XMLHTTP");
        if (estrai_province) {
            estrai_province.onreadystatechange = ricevi_province;
            estrai_province.open("GET", "estrai-province.asp?regione_spedizione="+regione_spedizione, true);
            estrai_province.send();
        }
    }
}

     
  function ricevi_province() {   
    var province;       
	  if (estrai_province.readyState == 4) {	    
		  province=estrai_province.responseText;

			document.getElementById('provincia').innerHTML = province;
			 }
	}

var estrai_comuni;
var provincia_spedizione
   
function cerca_comuni() 
{

provincia_spedizione=document.form.provincia_spedizione.options[document.form.provincia_spedizione.selectedIndex].value
    // branch for native XMLHttpRequest object
    if (window.XMLHttpRequest) {
        estrai_comuni= new XMLHttpRequest();
        estrai_comuni.onreadystatechange = ricevi_comuni;
        estrai_comuni.open("GET", "estrai-comuni.asp?provincia_spedizione="+provincia_spedizione, true);
        estrai_comuni.send(null);
    // branch for IE/Windows ActiveX version
    } else if (window.ActiveXObject) {
        estrai_comuni= new ActiveXObject("Microsoft.XMLHTTP");
        if (estrai_comuni) {
            estrai_comuni.onreadystatechange = ricevi_comuni;
            estrai_comuni.open("GET", "estrai-comuni.asp?provincia_spedizione="+provincia_spedizione, true);
            estrai_comuni.send();
        }
    }
}
    
  function ricevi_comuni() {   
    var comuni;       
	  if (estrai_comuni.readyState == 4) {	    
		  comuni=estrai_comuni.responseText;

			document.getElementById('comuni').innerHTML = comuni;
			 }
	}

</script>
Che poi richiamo così:
Codice:
<% reg = rs.Fields("regione_spedizione")%>
<select name="regione_spedizione" id="regione_spedizione" onChange="cerca_province();">
<option value="0">Seleziona Regione</option>
<%
Set MyConn=Server.CreateObject("ADODB.Connection")
MyConn.Open "Driver={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.Mappath("DB/RPC.mdb")
		SQL = "Select * From regioni order by regione asc"
		Set RS = MyConn.Execute(SQL)
		While Not RS.EOF
		%>
<option value="<%=rs("id_regione")%>" <%if reg = ""& rs("id_regione") &"" then%> selected="selected"<%end if%>><%=rs("regione")%></option>
		<%
		RS.MoveNext
		Wend
		RS.Close
		Set RS = Nothing
MyConn.Close
Set MyConn = Nothing
%>
</select>
	<td id="provincia" width="159">
		</td>
	<td id="comuni" width="159">
		</td>
Come dicevo ora vorrei che le select si autoselezionerebbero con i dati prelevati dal mio db, per la regione ho risolto, mentre per gli altri non so come fare.
Grazie per l'aiuto.
G.
 

Discussioni simili