Ciao ragazzi ... sono abbastanza nuovo con jquery, appena mi sembra di prendere un po di confidenza arriva qualcosa che mi blocca per un tempo indefinito.... ad esempio, cosa c'è che non va in questo codice ?
Codice PHP:
$(document).ready(function() {
$("#order_items input.quantity").blur(function(){
var item_id;
var item_value;
var parameters = "";
$("#order_items input.quantity").each(function() {
item_id = this.id;
item_value = this.value;
parameters += item_id+"="+item_value+"&";
});
$.ajax({
cache : "false",
type: "POST",
url: "http://localhost/index.php/cart/update_ajax",
data: parameters,
success: function(response)
{
$("#order_items").fadeOut();
$("#order_items").html(response).fadeIn(100);
}
});
$("#totale_carrello").load("http://localhost/index.php/cart/update_tot_ajax");
});
});
Questa è il codice della pagina creata è un semplice carrello:
Codice PHP:
<h1 id="il_tuo_carrello">Il Tuo Carrello</h1>
<div id="myForm">
<form action="http://localhost/index.php/cart/checkout.html" method="post" id="orderform"> <div id="order_items">
<table width="100%" cellpadding="5" cellspacing="2" border="0" class="display" id="orderitems">
<thead><tr>
<th>Prodotto</th><th>Quatità</th><th>Prezzo</th><th></th></tr></thead><tbody>
<tr style="background-color:">
<td>Rosetta</td><td><div align="center"><input type="text" name="input_1" value="2" id="input_1" class="quantity" size="3" min="1" /></div></td><td><div align="center">2,40 €</div></td><td><div align="right">[url="http://localhost/index.php/cart/delete_row/1.html"]Elimina[/url]</div></td></tr>
<tr style="background-color:">
<td>Filone tipo Baguette</td><td><div align="center"><input type="text" name="input_4" value="3" id="input_4" class="quantity" size="3" min="1" /></div></td><td><div align="center">13,50 €</div></td><td><div align="right">[url="http://localhost/index.php/cart/delete_row/4.html"]Elimina[/url]</div></td></tr>
<tr style="background-color:">
<td>Ciabatta</td><td><div align="center"><input type="text" name="input_6" value="2" id="input_6" class="quantity" size="3" min="1" /></div></td><td><div align="center">10,00 €</div></td><td><div align="right">[url="http://localhost/index.php/cart/delete_row/6.html"]Elimina[/url]</div></td></tr>
</tbody></table> </div>
<hr>
<table width="100%" border="0" cellspacing="5" cellpadding="0">
<tr>
<td>
<div align="right">
Totale Spesa: <span id="totale_carrello">25,90</span> €
<button name="button" type="button" id="update_cart" >Aggiorna il carrello</button>
<input type="submit" name="submit" value="Completa l'ordine" />
</div>
</td>
</tr>
</table>
</form>
</div>
Sto facendo solo esercizio, quello che voglio ottenere è che se l'utente cambia una quantità di un prodotto voglio che si aggiorni il suo carrello e il totale.
Carrello e totale sono nella sua sessione ma il discorso è analogo anche se fosse una chiamata a db.
In pratica quando un qualsiasi input di quantità perde il focus, jquery mi raggruppa tutte le variabili presenti e le posta via ajax al php. Il php estrae e aggiorna il carrello e restituisce la tabella con le righe prodotti quantità e prezzi aggiornati. Per ultimo, solo perchè è fuori dal DOM, un'altra chiamata ajax aggiorna il totale.
Il mio problema è che funziona benissimo, solo al primo cambio. Se faccio un secondo cambio di quantità rimane tutto così.
Perchè esegue solo il primo ???
Io sono PRO al web 2.0 però a volte ...
PS: Il bottone Aggiorna il carrello l'ho inserite per disperazione, al click fa esattamente le stesse cose che ho postato per il blur. Funziona, tutte le volte !! Ma è un compromesso, voglio che aggiorni senza cliccare !!
Grazie a tutti per i preziosi consigli ... farò tesoro anche delle eventuali migliorie se volete postarle.