Newsgroup: it.comp.lang.javascript
Titolo: Lezioni Carrello Spesa (Parte 3) New

Come già accennato nella seconda parte del corso in questa terza parte
risolveremo il problema della quantità.
Iniziamo con l'analizzare la quantità (Ordinata o da Ordinare) per un
prodotto.
Facciamo  un salto indietro...... alla prima lezione.... Ricordate quando
abbiamo creato il tipo Prodotto ??
function Prodotto (Codice, Descrizione, Prezzo, Numero)
{
this.Codice = Codice;
this.Descrizione = Descrizione;
this.Prezzo = Prezzo;
this.Numero = Numero;
}
Come potete notare ho aggiunto la voce Numero....
A questo punto dovremo modificare la funzione AggiungiProdotto....
In pratica dobbiamo controllare se il prodotto è già stato ordinato (se si
aggiungerne uno, se no aggiungere una nuova voce).
function AggiungiProdotto (Codice, Descrizione, Prezzo)
{
var Ordinato = false;
var LunghezzaCarrello = Carrello.length;
for (var Posizione = 0 ; Posizione < LunghezzaCarrello ; Posizione++) {
 if (Carrello[Posizione].Codice == Codice)
  {
   Carrello[Posizione].Quantità +=1;
   Ordinato = true;
  }
}
if (Ordinato == false) { Carrello[Nuovo] = new Prodotto (Codice,
Descrizione, Prezzo); }
}
Questa è una prima ottimizzazione del codice.... Come potete notare è
necessario che ogni prodotto venga identificato da un codice univoco.
A questo punto se un'utente clicca il bottone Ordine... Aggiunge un solo
prodotto alla volta.... e se volesse ordinare direttamente 100 pezzi ? Non
possiamo farlo cliccare 100 volte.. poverino :P
Passiamo quindi alla seconda ottimizzazione......
Abbiamo già detto che creeremo un catalogo prodotti e a fianco ad ogni
prodotto un bottone (o un link) "Ordina". Aggiungiamo subito dopo o subito
prima un campo di testo dove l'utente scriverà  la quantità.
<input type = "text" name = "Numero">
Ecco che giungiamo ad un altro problemino.... Si tratta della proprietà Name
del controllo testo....
Dobbiamo usare la proprietà value per leggere la quantità inserita
dall'utente..... Se chiamiamo tutte le casella di testo "Numero" (Ogni
prodotto ha una sua casella di testo)
sarà difficile andare a leggere il valore (Dovremmo usare l'array
dell'elemento...)
Esistono 2 valide alternative per risolvere questo problema...
A Noi interessa leggere il valore inserito in quel campo..
Possiamo creare un form indipendente per ogni prodotto.. in questo modo
abbiamo tante Caselle "Numero" ma ognuna diversa e facilmente reperibile
L'altra soluzione è quella di creare un form unico e dare alle caselle un
nome univoco.
Passiamo dalla teoria alla pratica..... vediamo quindi un esempio concreto :
<a href = "javascript:AggiungiProdotto('A450' , 'Processore AMD K6 3 450
Mhz' , 520000);">ORDINA</A>Quantità : <input type = "text" name = "A450">
ATTENZIONE : Ricordatevi che in Javascript le variabili non possono iniziare
con un Numero... Quindi se avete codici numerici dovrete aggiungere una
lettera al valore del campo di testo...
Per Esempio :
<a href = "javascript:AggiungiProdotto('450' , 'Processore AMD K6 3 450 Mhz'
, 520000);">ORDINA</A>Quantità : <input type = "text" name = "T450">
In questo caso il codice del prodotto è 450..... il nome della casella di
testo è invece
T450. Vedremo poi come richiamarlo correttamente.
Ora dobbiamo tornare alla funzione AggiungiProdotto...... Qualcuno
sicuramente si starà chiedendo (ma non si poteva farlo prima ?) La mia
intenzione è quello di affrontare il problema step by step...in modo tale da
rendere chiaro ogni singolo passaggio..... Perfezionando il codice di volta
in volta... Le azioni ripetitive aiutano meglio nella comprensione.. ;P
function AggiungiProdotto (Codice,Descrizione,Prezzo,Numero,Linea)
{
// Controllo se il prodotto è già in ordine
var Ordinato = false;
for (var Posizione = 0 ; Posizione <= Carrello.length ; Posizione++)
 {
 if (Carrello[Posizione] != null)
  { if (Carrello[Posizione].Codice == Codice)
    { alert ('Il prodotto ' + Carrello[Posizione].Descrizione + ' era già in
ordine (' + Carrello[Posizione].Numero + ' Pezzi - Lit ' +
Carrello[Posizione].Numero * Carrello[Posizione].Prezzo + ')\nil Numero è
stato modificato in ' + Numero + ' Totale Lit. ' + Numero *
Carrello[Posizione].Prezzo);
      Carrello[Posizione].Numero = Numero;
      Ordinato = true;
    }
  }
 }
if (Ordinato == false)
 {
  var Nuovo = Carrello.length;
  Carrello[Nuovo] = new Prodotto(Codice,Descrizione,Prezzo,Numero);
  alert ('Hai appena Ordinato ' + Numero + ' Pezzi del Prodotto : ' +
Descrizione + '\nTotale Lit : ' + Prezzo * Numero);
 }
}
Questa è la nostra function AggiungiProdotto perfettamente funzionante :))
Ora dobbiamo vedere come richiamare correttamente la function passandogli il
codice prodotto e la quantità
Sarà l'argomento della prossima puntata (4).
La struttura Javascript è priva di commenti e non è spiegato il
meccanismo... Il corso è stato studiato per rendere subito
operativi persone che hanno già un minimo di conoscenza di Javascript... chi
è a Zero deve aspettare le ultime lezioni del corso dove verrà
spiegato dettagliatamente ogni singolo passaggio del programma...
Alla prossima puntata !! :))
Alex.

voglio provare i tuoi script per curiosità. Solo per curiosità.
ti farò sapere......