Visualizzazione dei risultati da 1 a 3 su 3
  1. #1
    Utente di HTML.it L'avatar di gorn
    Registrato dal
    Jun 2010
    Messaggi
    91

    Select dinamiche con JQuery e PHP

    Salve a tutti.
    In un sito avrei la necessità di far aggiornare una select in base alla scelta fatta in una select precedente.
    Di esempi ne ho trovati molti in rete ma nessuno sembra aver voglia di funzionare
    Vi posto un po di codice:
    Questo è il pezzo in javascript che dovrebbe far cambiare valore alla seconda select quando cambia la prima
    codice:
    <SCRIPT type="text/javascript">
    $(document).ready(function(){
    $("select#s_matrice").change(function(){
    $("select#s_prodotti").html('<option value="-1">bbb</option>');
    })
    </script>
    Qui il codice delle due select
    codice:
    echo "<td><select id=\"s_matrice\">".$test."</select></td>";
    echo "<td><select id=\"s_prodotti\"></select></td>";
    la variabile $test contiene tutte le option della select. Ci tengo a precisare che la creazione della select con id=s_matrice funziona perfettamente.
    Il problema è che selezionando un qualsiasi valore della select con id=s_matrice la seconda select (id=s_prodotti) non assume il valore "bbb" come scritto nel pezzo di javascript.
    Spero in un vostro aiuto perchè davvero non capisco quale sia il problema.
    Intanto vi ringrazio,
    Il problema non è la caduta, ma l'atterraggio (Cit.)

  2. #2
    Utente di HTML.it L'avatar di gorn
    Registrato dal
    Jun 2010
    Messaggi
    91
    Ho risolto. Con molta vergogna ammetto di aver dimenticato una parentesi di chiusura nella funzione javascript

    Ora si presenta un problema di maggior complessità.
    codice:
    <SCRIPT type="text/javascript">
    $(document).ready(function(){
    $("select#s_matrice").change(function(){
      var matrice = $(\"select#s_matrice option:selected\").attr('value');
      $.post(\"select_prodotti.php\", {matr:matrice}, function(data){
        $("select#s_prodotti").html(data);
      })
    })
    </script>
    Questo codice, teoricamente, dovrebbe inviare ad un file .php il valore selezionato nella select s_matrice e dopo le elaborazioni fatte nel file .php restituire i valori nella select con id= s_prodotti. Ma questo non avviene.

    Questo è il codice del file select_prodotti.php
    Codice PHP:
    <?php 
    include_once 'select.class.php';
    $opt = new SelectList();

    if(isset(
    $_POST['matr']))
    {
        function 
    altraprova(){
            
    $ultprov $opt->ShowProdotti();
            return 
    $ultprov;
        }
    }else{
        echo 
    "'<option value=\"-1\"><-></option>'";    
    }
    ?>
    Di seguito il codice del file select.class.php
    Codice PHP:
    <?php
    class SelectList {
    public function 
    __construct()
    {
        
    $this->DbConnect();
    }
        
    protected function 
    DbConnect()
    {
        global 
    $db_server;
        global 
    $db_username;
        global 
    $db_password;
        global 
    $db_db;
                
    $this->conn mysql_connect($db_server,$db_username,$db_password) OR die("Impossibile  connettersi al database");
    mysql_select_db($db_db,$this->conn) OR die("Impossibile selezionare il database $db_db");
                
        return 
    TRUE;
    }
    public function 
    ShowMatrice()
    {
       
    $sql "select matrice from prodotti group by matrice order by matrice";
       
    $res mysql_query($sql,$this->conn);
       
    $s_matrice '<option value="-1"><-></option>';
       while(
    $row mysql_fetch_array($res))
       {
         
    $s_matrice .= '<option value="'.$row['matrice'].'">'.$row['matrice'].'</option>';
       }
         return 
    $s_matrice;
    }
     
    public function 
    ShowProdotti()
    {
    $sql "SELECT id , matrice, descrizione FROM prodotti WHERE matrice=".$_POST['matr']."";
     
    $res mysql_query($sql,$this->conn);
     
    $s_prodotti '<option value="-1"><-></option>';
     while(
    $row mysql_fetch_array($res))
      {
        
    $s_prodotti .= '<option    value="'.$row['descrizione'].'">'.$row['descrizione'].'</option>';
      }
        return 
    $s_prodotti;
    }
    }
    La funzione ShowMatrice compila la select con id= s_matrice mentre la funzione ShowProdotti si occupa di quella con id=s_prodotti.
    Premetto che non ho molta dimestichezza con le classi, ma nel file non ho trovato degli errori.
    Da una analisi del codice in esecuzione sembra che il problema sia questa istruzione:
    codice:
    $.post(\"select_prodotti.php\", {matr:matrice}, function(data){
    Ma sinceramente non ho capito il motivo del malfunzionamento.
    Spero in un vostro aiuto,
    Il problema non è la caduta, ma l'atterraggio (Cit.)

  3. #3
    Utente di HTML.it L'avatar di gorn
    Registrato dal
    Jun 2010
    Messaggi
    91
    Ho risolto.
    Il problema risiedeva nel percorso del file.php al quale passare i valori nella funzione $.post.
    Non è sufficiente indicare il nome del file ma bisogna scrivere il percorso completo(anche se i file "chiamante" e "ricevente" sono nella stessa directory).
    Inoltre studiando un po ho scoperto che utilizzare la funzione (metodo?) $.ajax che consente una flessibilità e controllo maggiori.
    Ultima cosa: per delle semplici query di selezione è meglio passare i valori con il metodo GET (informazione trovata su molte guide ma tutta da verificare).
    Spero di essere stato di aiuto

    Ora però ho una domanda complicata:
    Qualcuno di voi ha mai provato a modificare l'evento "change" di combobox (select) con l'effetto autocompletamento di jquery? in parole piu semplici, devo creare delle combobox dinamiche ma l'effetto autocompletamento inibisce l'evento "change".
    Spero in una risposta da chi è pazzo come me per fare queste modifiche
    ps: mi scuso se il post è finito "fuori sezione"

    Il problema non è la caduta, ma l'atterraggio (Cit.)

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.