ciao a tutti.

Ho trovato uno script molto bello (e gia discusso) per la popolazione dinamica delle select con ajax.
Questo script ha 3 livelli : regioni - province - citta.
Il problema e' che quando seleziono una regione , appare automaticamente popolata la <select> delle province.... mentre quella delle città si popola solo se si cambia il valore della select province.
Come posso modificare lo script affinche venga immediatamente popolata anche la terza <select> senza bisogno di cambiare il valore della seconda(province) per farlo apparire???

Potete trovare lo script qui dentro :

http://www.conveyormarket.eu/registrazione_prova.php

Spero di esser stato abbastanza chiaro.

cmq posto un po di codice ajax :


file list.js

Codice PHP:

var xmlHttp getXmlHttpObject();

function 
loadList(tbid){
xmlHttp.open('GET''request.php?table='+tb+'&id='+idtrue);
xmlHttp.onreadystatechange stateChanged;
xmlHttp.send(null);
}
function 
addOption(selectvaluetext) {
    
//Aggiunge un elemento <option> ad una lista <select>
    
var option document.createElement("option");
    
option.value value,
    
option.text text;
    try {
        
select.add(optionnull);
    } catch(
e) {
        
//Per Internet Explorer
        
select.add(option);
    }
}
function 
getSelected(select) {
    
//Ritorna il valore dell'elemento <option> selezionato in una lista
    
return select.options[select.selectedIndex].value;
}
function 
stateChanged() {
    if(
xmlHttp.readyState == 4) {
        
//Stato OK
        
if (xmlHttp.status == 200) {
            
            var 
resp xmlHttp.responseText;
            
            if(
resp) {
                
//Le coppie di valori nella striga di risposta sono separate da ;
                
var values resp.split(';');
                
//Il primo elemento è l'ID della lista.
                
var listId values.shift();
                var 
select document.getElementById(listId);
                
//Elimina i valori precedenti
                
while (select.options.length) {
                    
select.remove(0);
                } 
                
                if(
listId == 'regioni') {

                    
addOption (select0'-- Selezionare regione --');
                }
                var 
limit values.length;
                
                for(
i=0limiti++) {
                    var 
pair values[i].split('|');
                    
//aggiunge un elemento <option>
                    
addOption(selectpair[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;

file request.php

Codice PHP:
require 'dbconfig.php';
$conn mysql_connect(DB_HOSTDB_USERDB_PASSWORD) or die;
mysql_select_db(DB_NAME) or die;
//I valori in input vanno verificati
//id deve essere un valore numerico
$pid = (int)$_REQUEST['id'];
//maschera  eventuali caratteri speciali in table 
$tb mysql_real_escape_string($_REQUEST['table'], $conn);

switch(
$tb) {
    case 
'regioni':
        
$sql="SELECT id, nome FROM `$tb` ORDER BY nome";
        break;
    case 
'province':
        
$sql="SELECT id, nome FROM `$tb` WHERE id_regione=$pid ORDER BY nome";
        break;
        case 
'comuni':
        
$sql="SELECT id, nome FROM `$tb` WHERE id_provincia=$pid ORDER BY nome";
        break;
        
}
//Il primo elemento della risposta è il nome della tabella (= attributo ID del tag select)
$out="$tb;";
if(
$result mysql_query($sql$conn)) {
    while (
$row mysql_fetch_row($result)) {
        
$out .= $row[0] . '|' $row[1] . ';';
    }
}
//Rimuove il carattere ; in coda
echo rtrim($out';');