Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 13
  1. #1

    Select dinamiche - aggiungere opzione select

    Ciao a tutti.
    Sto utilizzando uno script per select dinamiche per l'inserimento in un database di due select, in cui la seconda si aggiorna dopo aver selezionato la prima.
    Vorrei utilizzare questo script anche per la modifica dei prodotti inseriti, ma non riesco ad impostare quale <option> deve essere "selected".

    lo script utilizza questi files;

    list.js
    codice:
    var xmlHttp = getXmlHttpObject();
    
    function loadList(tb, id){
    xmlHttp.open('GET', 'request.php?table='+tb+'&id='+id, true);
    xmlHttp.onreadystatechange = stateChanged;
    xmlHttp.send(null);
    }
    function addOption(select, value, text) {
    	//Aggiunge un elemento <option> ad una lista <select>
    	var option = document.createElement("option");
    	option.value = value,
    	option.text = text;
    	try {
    		select.add(option, null);
    	} 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 == 'sezioni') {
    					addOption (select, 0, '-- Seleziona sezione --');
    				}
    				var limit = values.length;
    				
    				for(i=0; i < limit; i++) {
    					var pair = values[i].split('|');
    					//aggiunge un elemento <option>
    					addOption(select, pair[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;
    }
    request.php
    Codice PHP:
    <?php
    // questo file serve per comporre le select dinamiche delle categorie


    define('DB_HOST','xx.xxx.xxx.xx');
    define('DB_NAME','nomedatabase');
    define('DB_USER','user');
    define('DB_PASSWORD','password');

    $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 
    'sezioni':
            
    $sql="SELECT id, nome FROM `$tb` ORDER BY nome";
            break;
        case 
    'categorie':
            
    $sql="SELECT id, nome FROM `$tb` WHERE id_sezione=$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';');
    ?>
    e le select vengono richiamate così:
    codice:
    <select name="sezioni" id="sezioni" onchange="loadList('categorie', getSelected(this))" ></select>
    <select name="categorie" id="categorie"></select>
    
    <script type="text/javascript">
    //<![CDATA[
    loadList('sezioni', 0);
    //]]>
    </script>
    Qualcuno sa darmi una mano?

    grazie ciao
    fox

  2. #2
    Utente di HTML.it
    Registrato dal
    Dec 2010
    Messaggi
    3,660
    cerca nel forum, ci sono moltissimi utenti che hanno già fatto richieste simili alla tua... e uno se non ricordo male ha usato lo stesso identico codice che hai postato.

  3. #3
    ho fatto qualche ricerca... ma non ho trovato chi avesse il mio stesso problema.

    Per la verità io uno spunto l'ho trovato, ho provato ad aggiungere al file che richiama le select una funzioncina javascript

    codice:
    <script type="text/javascript"> function setselected(){ document.form2.sezioni.defaultSelected=2; } </script>
    dove form2 è il nome del form che ospita la select, e sezioni il nome della select.

    Ho richiamato la funzione in <body onLoad="setselected()">, per far sì che provasse ad impostare la option di default alla fine del caricamento della pagina, ma nulla.

    Ha senso la funzione che ho scritto??

    Dovrei studiare un po'di javascript...
    fox

  4. #4
    Utente di HTML.it
    Registrato dal
    Dec 2010
    Messaggi
    3,660
    prova a fare cosi:

    codice:
    document.form2.sezioni.options[2].selected = true;
    invece di

    codice:
    document.form2.sezioni.defaultSelected=2

  5. #5
    Nulla. Non succede niente.

    Mi rimane sempre la prima option selezionata di default...

    http://www.skillyourself.it/DIAL/for...caprodotto.php
    fox

  6. #6
    Utente di HTML.it
    Registrato dal
    Dec 2010
    Messaggi
    3,660
    la funzione setSelected deve essere eseguita dopo la funzione loadList...

    edit: prova anche cosi: loadList('sezioni',2);

  7. #7
    Ho provato a chiamare la funzione dopo il loadList. Nulla. Allora ho provato (non per mancanza di fiducia eh!) ad applicare la funziona ad una select "normale", non creata da javascript e la funzione... FUNZIONA!!

    Controllando la sorgente HTML del mio file "formmodificaprodotto.php" restituita dal mio browser ho notato che le select non hanno il classico codice che le identifica, ma anche nell'html sono così

    codice:
    <select name="sezioni" id="sezioni" onchange="loadList('categorie', getSelected(this))" ></select><select name="categorie" id="categorie"></select>
    forse è per questo che la funzione non compie il suo lavoro??
    fox

  8. #8
    Utente di HTML.it
    Registrato dal
    Dec 2010
    Messaggi
    3,660
    hai già provato cosi?

    codice:
    loadList('sezioni',2);

  9. #9
    sì, e mi sembra di aver capito che la funzione getSelected

    codice:
    function getSelected(select) {
    	//Ritorna il valore dell'elemento <option> selezionato in una lista
    	return select.options[select.selectedIndex].value;
    }
    Non serva ad impostare la option "selected", ma a prendere il valore della option selezionata e a creare dinamicamente la seconda in base al valore della prima...

    Ora magari dico una cavolata... ma non sarebbe un'idea aggiungere un argomento alla funzione LoadList in modo che aggiunga un selected all'opzione da me decisa?
    fox

  10. #10
    Utente di HTML.it
    Registrato dal
    Dec 2010
    Messaggi
    3,660
    come mi sembrava, avevo gia visto questo codice sul forum postato da un altro utente qui , il problema è sempre lo stesso le chiamate alle funzioni devono essere sincrone altrimenti mentre cerca di eseguire la seconda (setSelected), la prima funzione (loadList) non ha ancora terminato di riempire le select.

    Quindi la modifica va fatta all'interno della funzione stateChanged...

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 © 2024 vBulletin Solutions, Inc. All rights reserved.