Newsgroup: it.comp.lang.javascript
Titolo: Jquery .change creare 2 o piu eventi  oppure  2 o piu $.post

Vi descrivo che eventi devo generare
Prima selectbox
<select id="stampa" name="stampa" onChange="calculateTotal();">
<option>Scegli...</option>
</select>
 
con Jquery gestisco .change
$(document).ready(function(){
    $("select#stampa").change(function(){
    var stampa = $("select#stampa option:selected").attr('value');
 
    $.post("select.php", {PrinttypeID:stampa}, function(data){
        $("select#colori").removeAttr("disabled");
        $("select#colori").html(data);
     });
});
 
a questo punto con select.php creo una query
 
$opt = new SelectList();
 
if(isset($_POST['PrinttypeID']))
{
    echo $opt->ShowColori();
    die;
}
Questa query va a popolare la lista delle <option... della selectbox 
sottostante
 
<select id="colori" name="colori" onChange="calculateTotal();">
<option>Scegli...</option>
</select>
 
public function ShowColori()
{
    include("sqlprotect.php");
    $sql_colori = new sqlprotect();
    $sql->secureGlobals();
 
    $sql_colori = "SELECT printtype.PrinttypeID, printtype.Printtype, 
printtype_colors.PrinttypeColors as colors, 
printtype_colors.PrinttypeColorsID as ID
            FROM printtype
            LEFT JOIN printtype_colors ON printtype_colors.PrinttypeID = 
printtype.PrinttypeID
            WHERE printtype_colors.PrinttypeID=".$_POST[PrinttypeID]."
            ORDER BY printtype_colors.PrinttypeColors
            ";
    $res_colori = mysql_query($sql_colori,$this->conn);
    $colori = '<option value="0">scegli...</option>';
 
        while($row_colori = mysql_fetch_array($res_colori))
        {
            $colori .= '<option value="' . $row_colori['ID'] . '">' . 
utf8_encode($row_colori['colors']) . '</option>\n';
 
        }
 
 
    return $colori;
}
 
Ho la necessita di creare un'altro evento in 
$("select#stampa").change(function() descritta sopra:
 
$(document).ready(function(){
    $("select#stampa").change(function(){
    var stampa = $("select#stampa option:selected").attr('value');
 
    $.post("select.php", {PrinttypeID:stampa}, function(data){
        $("select#colori").removeAttr("disabled");
        $("select#colori").html(data);
     });
});
 
e cioè un'altra query.
Giustamente se vado a crerla cosi mi darà errore perche vado a romper le 
balle alla popolazione degli <option>
if(isset($_POST['PrinttypeID']))
{
    echo $opt->ShowColori();
     echo $opt->ShowCosti();
    die;
}
 
il secondo evento evento al cambiamento di .change è questo
 
if(isset($_POST['Quantity']))
{
    echo $opt->ShowCosti($_POST['Printtype'],$_POST['Quantity'] );
 
    die;
}
 
public function ShowCosti($PrinttypeID, $Quantita)
{
    include("sqlprotect.php");
    $sql_range_prezzo = new sqlprotect();
    $sql->secureGlobals();
 
    $sql_range_prezzo = " SELECT range_prezzo, range_aggiuntivo
                    FROM rangeprice
                    WHERE PrinttypeID = ".$PrinttypeID."
                    AND ".$Quantita."  between scaglione_range_da AND 
scaglione_range_a
            ";
    $res_range_prezzo = mysql_query($sql_range_prezzo,$this->conn) or die 
("Query Failed ".mysql_error(). print $sql_range_prezzo);
 
        while($row_range_prezzo = mysql_fetch_array($res_range_prezzo))
        {
            $range_prezzo = '<input name="costi"  id="costi" type=" text" 
value="' . $row_range_prezzo['range_prezzo'] . '" 
onchange="calculateTotal();"><br />';
            $range_prezzo .= '<input name="costi_agg"  id="costi_agg" 
type="text" value="' . $row_range_prezzo['range_aggiuntivo'] . '" 
onchange="calculateTotal();"><br />';
        }
 
 
    return $range_prezzo;
}
 
 
Per cui la mia domanda è come faccio a creare due o piu eventi in 
$("select#stampa").change(function() per far si che mi crei 2 o piu query?
 
 

 $("select#stampa").change(function() per far si che mi crei 2 o piu query?
 
Dunque, tu vuoi che all' onchange della select `stampa`, il server ti
faccia due query sul DB, le restituisca al client, che ci fa due cose
diverse E non collegate l'una all'altra (sono due query autonome e
distinte).
Per come la vedo io, hai due possibilità di base. La prima, fai due
chiamate al server. Probabilmente è quella più semplice per te da
implementare, ma la meno efficiente. In pratica fai:
 
    $(function(){
        $("#stampa").change(function(){
            // il tuo codice
 
            $.post("colori.php", {PrinttypeID:stampa}, function(data){
                // il tuo codice
            });
 
            $.post("costi.php", {PrinttypeID:stampa}, function(data){
                // il tuo codice
            });
        }
    }
 
Il secondo, fai restituire a `select.php` sia il risultato per i colori
sia quello per costi, ma per farlo non devi più restituire del codice
HTML puro e semplice, ma una struttura JSON, che magari ha due
proprietà, `colorOptions` e `priceOptions`, che contengono il codice
HTML sottoforma di stringa che prima "sparavi" direttamente in output. A
quel punto ti basta avere nel tuo codice una chiamata HTTP sola:
 
    $(function(){
        $("#stampa").change(function(){
            // il tuo codice
 
            $.post("select.php", {PrinttypeID:stampa}, function(data){
                $("select#colori")
                    .removeAttr("disabled")
                    .html(data.colorOptions);
 
                $("select#costi")
                    .removeAttr("disabled")
                    .html(data.priceOptions);
 
            }, "json"); // attenzione, ora il `dataType` è JSON
        }
    }
 
Hope it helps.