Ho creato delle select dinamiche usando ajax per selezionare regione->provincia->comune cioè 3 select di cui le ultime due prendono il risultato precedente, credo di aver reso l'idea oramai ci sono su tutte le pagine di regitrazione piu o meno, cmq il problema e che dopo aver selezionato la regione non riesco a popolare la select delle provincie, vi posto il codice se potete dargli un occhiata per capire dov'è che sbaglio ve ne sarei grato
ora vi posto il controller :
questo sarebbe ajax_selected.tplcodice:<?php class CAjax { public function Seleziona() { $CRegistrazione=USingleton::getInstance('CRegistrazione'); $VHome=USingleton::getInstance('VHome'); $VAjax=USingleton::getInstance('VAjax'); switch ($VAjax->GetRequest('task')) { case: 'getRegioni': { return $this->GetRegioni(); } case: 'getProvincie': { $regione=$VAjax->GetRequest('regione'): return $this->GetProvincie(); } default: { $registrazione=$CRegistrazione->GetUtentLoggato(); if($registrazione) return $VHome->SetPageLoggato(); else return $VHome->SetPageNonLoggato(); } } } public function GetRegioni() { $FRegione=USingleton::getInstance('FRegione'); $VAjax=USingleton::getInstance('VAjax'); $query="SELECT * FROM `regioni` ORDER BY _regione;"; $FRegioni->Query($query); $risultati=$FRegione->GetResultArray(); $VAjac->SetDati('regioni',$risultati); $VAjax->SetLayout('select'); return $VAjax->UseTemplate(); } public function GetProvincie($idregione) { $FProvincia=USingleton::getInstance('FProvincia'); $VAjax=USingleton::getInstance('VAjax'); $query='SELECT _sigla,_provincia FROM `province` WHERE _idregione='.$idregione.' ORDER BY _provincia;'; $FProvincia->Query($query); $risultati=$FProvincia->GetResultArray(); $VAjax->SetDati('array',$risultati); $VAjax->SetLayout('select'); return $VAjax->UseTemplate(); } public function GetComuni($siglaprovincia) { $FComune=USingleton::getInstance('FComune'); $VAjax=USingleton::getInstance('VAjax'); $query="SELECT _idcomune,_comune FROM `comuni` WHERE `_provincia`='".$siglaprovincia."' ORDER BY _comune;"; $FComune->Query($query); $risultati=$FComune->GetResultArray(); $VAjax->SetDati('array',$risultati); $VAjax->SetLayout('select'); return $VAjax->UseTemplate(); } } ?>
codice:{section name=i loop=$array} <option value="{$array[i][0]}">{$array[i][1]}</option> {/section}
ora vi posto la pagina del javascript:
codice:function assegnaXMLHttpRequest() { var XHR=null; //nome del browser browserUtente=navigator.userAgent.toUpperCase(); // browser standard con supporto nativo (non importa il tipo di browser) if (typeof(XMLHttpRequest)==="function" || typeof(XMLHttpRequest)==="object") { XHR=new XMLHttpRequest(); } // browser Internet Explorer else if (window.ActiveXObject && browserUtente.indexOf("MSIE 4")<0) { //versione 6 if (browserUtente.indexOf("MSIE 5")<0) { XHR=new ActiveXObject("Msxml2.XMLHTTP"); } //versioni 5 e 5.5 else { XHR=new ActiveXObject("Microsoft.XMLHTTP"); } } return XHR; } function getProvince() { var idregione=document.getElementById('regione').value; var param='index.php?controller=ajax&task=getProvince®ione='+idregione; //creazione della richiesta di tipo XHR var richiesta=assegnaXMLHttpRequest(); //formulazione della richiesta richiesta.open('GET', param, true); //invio della richiesta richiesta.send(); //gestione della richiesta e della risposta if (richiesta) { richiesta.onreadystatechange=function() { // verifica dello stato della richiesta if (richiesta.readyState===4) { // verifica della risposta da parte del server if(richiesta.statusText==="OK") { //document.getElementById('provincia').innerHTML=richiesta.responseText; var risposta=richiesta.responseText; alert(risposta); var select=document.registrazione.provincia; addOption (select,chiave,valore); // qui ci vorrebbe un ciclo che le inserisse nelle select, ma come fare??? if (risposta) { var values=risposta.split(' '); while (select.options.length) { select.remove(0); } } } } } } } function addOption (select,chiave,valore) { var option=document.createElement('option'); option.value=chiave; option.text=valore; try { select.add(option,null); } catch(e) { //per Internet Explorer select.add(option); } }
se avete bisogno di ulteriori dettagli fatemi sapere, grazie!

Rispondi quotando