Visualizzazione dei risultati da 1 a 5 su 5
  1. #1

    [JS +AJAX] combo a cascata

    ciao a tutti,
    ho trovato un codice (ajax + js + php) che, data una scelta in una combo, mi riempie una seconda combo con i dati relativi presi da db. funziona tutto fortunamente.

    ora, la stessa pagina è usata da me per modificare dei dati già presenti nel db, devo quindi far in modo che le varie combo abbiano un "selected" sul dato corretto.

    nel mio caso ho 2 combo, una per gli stati e la seconda per le regioni.
    per gli stati tutto ok, funziona già; il problema è per le regioni: infatti il codice js che uso tiene nascosta la seconda combo finchè non scego qualcosa dalla prima.

    tralasciando codice ajax e php che vanno e non credo siano resposabili della cosa, posto il JS sperando che qualche buon anima mi dica come devo fare per fare in modo che la seconda combo sia visualizzata SEMPRE

    codice:
        <script language="javascript" type="text/javascript">
    	
    	function recupera_regioni(v)
    	{
    		var id = v.value;
    		if(id == "")
    		{
    			$("div1").innerHTML = "";
    			return;
    		}
    		
    		var parametri = "id=" + id;
    		sajax("?comando_ajax=trova_regioni", onload, parametri);
    		function onload()
    		{
    			var t = this.request.responseText;
    			$("div1").innerHTML = t;
    		}
    		
    	}
        </script>
    nell'html
    codice:
    <select name="nazione" id="stati" onchange="recupera_regioni(this);" class="selectfield" ><?=stati($nazione)?></select>

  2. #2
    Moderatore di JavaScript L'avatar di br1
    Registrato dal
    Jul 1999
    Messaggi
    19,998

    Re: [JS +AJAX] combo a cascata

    Originariamente inviato da andropoff
    nel mio caso ho 2 combo, una per gli stati e la seconda per le regioni.
    per gli stati tutto ok, funziona già; il problema è per le regioni: infatti il codice js che uso tiene nascosta la seconda combo finchè non scego qualcosa dalla prima.
    In quello che posti non c'e' nulla a cui attribuire la visibilita' della select, cerca altrove negli altri script che non posti.

    Se poi con ajax ricevi l'intera select da iniettare nel div, e' ovvio che finche' non esegui la richiesta non vedrai nulla...

    ciao
    Il guaio per i poveri computers e' che sono gli uomini a comandarli.

    Attenzione ai titoli delle discussioni: (ri)leggete il regolamento
    Consultate la discussione in rilievo: script / discussioni utili
    Usate la funzione di Ricerca del Forum

  3. #3
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116
    in un esempietto che uso, metto:

    <div id="div1"><select style="width: 200px"></select></div>

    ossia, riempio div1 con una select vuota. L'unica cosa è darle una larghezza pari a quella piena.

    Quando scelgo lo stato non faccio altro che ricrearmi la select regioni che adesso vedrò riempita.
    Pietro

  4. #4

    Re: Re: [JS +AJAX] combo a cascata

    Originariamente inviato da br1
    In quello che posti non c'e' nulla a cui attribuire la visibilita' della select, cerca altrove negli altri script che non posti.

    Se poi con ajax ricevi l'intera select da iniettare nel div, e' ovvio che finche' non esegui la richiesta non vedrai nulla...

    ciao
    grazie per la risposta:

    la select si crea via php e viene inserita nel div come dici tu .. altro codice js non c'è n'è tranne la parte ajax ... dici che è quello in problema?

    favorisco il codice magari che scappandoti l'occhio vedi qualcosa che possa fare ciò che mi serve... ci sto smanettando da 3 giorni praticamente senza ottenere risultato... ci sarà una variabile o un qualcosa che 'avverta' in sistema che la seconda select va visualizzata?

    codice:
    // JavaScript Document
    // File JScript
    function sajax(url, onload, parameters, onerror)
    {
    	parameters = (parameters == undefined)? "" : parameters;
    	
    	//creazione oggetto per richiesta web
    	var objHTTP = getXMLHttp();
    	objHTTP.open("post", url, true);
    	objHTTP.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
    	objHTTP.setRequestHeader('Content-length',parameters.length);
    	objHTTP.setRequestHeader('Connection', 'close');
    
    	objHTTP.onreadystatechange = function() 
    	{ 
    		if (objHTTP.readyState == 4) 
    		{
    			if (objHTTP.status == 200 || objHTTP.status == 0)
    			{
    				this.request = objHTTP;
    				if(onload) onload.call(this);
    			}											
    			else {if(onerror && typeof(onerror) == "function") {onerror(defaultError); return;}else {defaultError(); return;}}
    		}
    	};
    
        objHTTP.send(parameters);
        
    
        function getXMLHttp() 
        {
    	    var xmlhttp = null;
        	
    	    if(window.XMLHttpRequest) 
    	    {
    		    xmlhttp = new XMLHttpRequest(); // Gecko (Firefox, Moz), KHTML (Konqueror, Safari), Opera, Internet Explorer 7
    	    } 
    	    else if(window.ActiveXObject) 
    	    {
    		    try
    		    {
    			    xmlhttp = new ActiveXObject("MSXML2.XMLHTTP"); // Internet Explorer 6 
    		    } 
    		    catch(e) 
    		    {
    			    xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); // Internet Explorer 4,5 
    		    }
    		    } 
    	    else 
    	    {
    		    xmlhttp = null;
    	    }
    	    return xmlhttp;
        };
    
    	function defaultError()
    	{
    		alert("ERRORE NELLA TRASMISSIONE DATI!");
    	};
    }
    
    //al posto di mettere document.getElementById("div1"), mettere $("div1")
    //da prototype.js
    function $() {
      var elements = new Array();
    
      for (var i = 0; i < arguments.length; i++) {
        var element = arguments[i];
        if (typeof element == 'string')
          element = document.getElementById(element);
    
        if (arguments.length == 1)
          return element;
    
        elements.push(element);
      }
    
      return elements;
    }

  5. #5
    Originariamente inviato da pietro09
    in un esempietto che uso, metto:

    <div id="div1"><select style="width: 200px"></select></div>

    ossia, riempio div1 con una select vuota. L'unica cosa è darle una larghezza pari a quella piena.

    Quando scelgo lo stato non faccio altro che ricrearmi la select regioni che adesso vedrò riempita.
    infatti dopo altre 2 ore di smaronnamento ho optato per la tua opzione, con la 'variante' che comunque nel caso il dato esista già, la combo vuota si riempie con tutte le regioni e la regione interessata in selected.

    grazie 1000 per l'input...

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.