Con queste funzioni popolo una seconda select al cambiamento di una prima select.
Se metto gli id direttamente nel codice funziona.
Se invece metto gli id come argomenti non funziona.
In poche parole non riesco a passare la variabile idSelect alla funzione updateSelect.
Come faccio a passargliela?
codice:/* * Funzione per la popolazione di una select con id = idSelect e xml=fileXML alla selezione di una latra select con id= idPrincipale */ function populateSelect( idPrincipale, idSelect, fileXML ) { //Recupero i dati da inviare var mainSelection = document.getElementById( idPrincipale ); //Creo un nuovo oggetto XMLHTTPRequest var req = newXMLHttpRequest(); //Invio la richiesta req.open("POST", fileXML, true); req.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); //Invio i dati POST req.send("id=" + mainSelection.options[mainSelection.selectedIndex].value); //Gestore dell'evoluzione dello stato dell'oggetto req req.onreadystatechange = handleResponse(req, updateSelect(idSelect)); } /* * Popolo la SELECT * XMLResult = Il risultato XML prodotto da handleResponse */ function updateSelect(XMLResult, idSelect) { //Gestisco il documento XML ricevuto e popolo la seconda SELECT var categoria = XMLResult.getElementsByTagName('categoria'); //Recupero la seconda SELECT var subSelection = document.getElementById( idSelect ); //Svuoto la seconda SELECT for (var i = subSelection.length - 1; i >= 0; i--) subSelection.remove(i); //Scorro gli elementi for (var i = 0; i < categoria.length; i++){ //Recupero i vari elementi singoli var item = categoria[i]; //Creo il nuovo elemento OPTION da aggiungere nella seconda SELECT var NewOpt = document.createElement('option'); NewOpt.value = item.getAttribute("value"); NewOpt.text = item.firstChild.nodeValue; //Popolo la seconda SELECT try{ subSelection.add(NewOpt, null); //Metodo Standard, non funziona con IE } catch(e){ subSelection.add(NewOpt); // Funziona solo con IE } } }
codice:function newXMLHttpRequest(){ var xmlreq = false; //Controllo il tipo di oggetto XMLHttpRequest da utilizzare if(window.XMLHttpRequest){ //Per browser non Microsoft xmlreq = new XMLHttpRequest(); }else if(window.ActiveXObject){ //Cerco di creare l'oggetto via MS ActiveX try{ //Nuove versioni per browser IE xmlreq = new ActiveXObject("Msxml2.XMLHTTP"); }catch(e1){ //Errore riscontrato durante la creazione dell'oggetto try{ //Precedenti versioni per browser IE xmlreq = new ActiveXObject("Microsoft.XMLHTTP"); }catch(e2){ //Nuovo errore durante la creazione dell'oggetto xmlreq = false; } } } //Restituisco l'eventuale oggetto XMLHttpRequest return xmlreq; } /* * Ritorna una funzione per la gestione dello stato dell'oggetto req. * Ed infine a stato finale raggiunto, invia la risposta XML alla funzione che dovra' gestire il tutto. * req = Istanza XMLHTTPRequest * XMLHandler = nome della funzione a cui passare il risultato XML da gestire */ function handleResponse(req, XMLHandler){ return function(){ //Controllo se l'oggetto req ha raggiunto lo stato finale if(req.readyState == 4){ //Inoltre accertiamoci di aver ottenuto il messaggio 200 dal server, if (req.status == 200){ //A questo punto richiamo la funzione che gestira' il risultato XML XMLHandler(req.responseXML); }else{ alert("Errore HTTP: " + req.status); } } } }

Rispondi quotando