JS: Element aus dem Array entfernen
lima-city → Forum → Die eigene Homepage → HTML, CSS & Javascript
anzahl
apfel
apfelsaft
array
artikel
behoben code
code
eingekauften sachen
einkauf
einkaufswagen
entfernen
essen
inhalt
item
liste
richtige artikel
steak
trinken
url
warenkorb
-
Hallo!
Ich versuche gerade, mir einen Einkaufswagen zu bauen. Heißt man klickt auf einen Artikel (Bsp: "Apfel") und im "Warenkorb" wird "1x Apfel" gespeichert. Außerdem soll es eine separate Übersicht geben, was man gekauft hat - also "Apfel" auf die Liste. Kauft man "Apfel" nun noch einmal, dann steht im "Warenkorb" "2x Apfel" - auf der Liste der Sachen im Warenkorb steht aber immernoch nur einmal "Apfel" (ohne Mengenangabe).
Entscheidet man sich aber gegen einen Artikel, soll dieser nicht nur aus dem Warenkorb sondern auch aus der Liste entfernt werden, wenn eben alle Äpfel (um beim Beispiel zu bleiben) entfernt wurden.
Das Hinzufügen von Dingen funktioniert bisher auch (http://ai-tenshi.lima-city.de/einkaufswagen/index_7.htm). Jedoch wird beim entfernen von Items das Array zur Darstellung der Liste der Dinge im Warenkorb (einkauf) nicht richtig bearbeitet... Manchmal wird der richtige Artikel gelöscht, ein andermal wieder nicht...
Hier sind meine Grunddefinitionen:
//Grundwerte jedes Items var neuesItem; //Einpackverwaltung - Inhalte des Warenkorbes var einkauf = new Array(); //Shopdarstellung - Inhalte des Shops var shopliste = new Array; //Inhalte: 0:Name, 1:Art, 2:Esswert, 3:Trinkwert, 4:Anzahl, 5:Preis shopliste[0] = new Array ("Apfelsaft", "Trinken", 0, 6, 0, 1); shopliste[1] = new Array ("Müsli", "Essen", 2, 0, 0, 1.70); shopliste[2] = new Array ("Steak", "Essen", 10, 2, 0, 20); shopliste[3] = new Array ("Wasser", "Trinken", 0, 8, 0, 1.00); shopliste[4] = new Array ("Apfel", "Essen", 4, 1, 0, 3.30); shopliste[5] = new Array ("Kuchen", "Essen", 10, 4, 0, 10.00); shopliste[6] = new Array ("Wassermelone", "Essen", 2, 10, 0, 4.00); shopliste[5] = new Array ("Kaffee", "Trinken", 0, 2, 0, 3); shopliste[6] = new Array ("Sprudel", "Trinken", 0, 3, 0, 2.00); shopliste.sort();
Die Liste mit den eingekauften Dingen erstelle ich so:
function warenkorbliste(neuesItem) // neuesItem ^= Utensil { //Arrayverwaltung var schonvorhanden = false; for(var i = 0; i < shopliste.length; i++) { //Wenn Item einem Teil im Array entspricht (Item schon in Array) dann alles okay if(neuesItem == einkauf[i]) { schonvorhanden = true; break; } } //Wenn Vari noch immer auf false (Item nicht in Array), dann in Array rein if(! schonvorhanden) { einkauf.push(neuesItem); } //Geordnete Ausgabe des Einkaufs einkauf.sort(); einkaufausgabe = einkauf.join(", "); document.getElementById('ausgabe').innerHTML = "Im Einkaufswagen: <b>" + einkaufausgabe + "</b><br />"; }
Es wird also immer der Name des Artikels in das Array "einkauf" gelegt und alphabetisch sortiert.
Wird nun ein Item entfernt, rufe ich die folgende Funktion für die Liste auf:
//Item entfernen function Itemweg(neuesItem) { for(var i = 0; i < shopliste.length; i++) { //Wenn der Name des Items in der Shopliste ist if (neuesItem == shopliste[i][0]) { //Wenn das Item komplett aus dem Warenkorb entfernt wurde - GEHT NICHT ZUVERLÄSSIG if (shopliste[i][4] == 0) { einkauf = einkauf.slice(0, i).concat(einkauf.slice(i + 1)); } } } //Ausgabe der Liste einkauf.sort(); einkaufausgabe = einkauf.join(", "); document.getElementById('ausgabe').innerHTML = "Im Einkaufswagen: <b>" + einkaufausgabe + "</b><br />"; }
Soweit ich mich informiert habe, sollte es eigentlich mit "einkauf = einkauf.slice(0, i).concat(einkauf.slice(i + 1));" funktionieren - tut es aber nicht...
Kann mir jemand weiterhelfen? :3
Danke euch!
Grüße
Ai
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Edit:
Ich habe das Problem gefunden und behoben:
function Itemweg(neuesItem) { //Anzahl und Trink- und Esswert dezimieren for(var i = 0; i < shopliste.length; i++) { //Wenn der Name des Items in der Shopliste ist if (neuesItem == shopliste[i][0]) { //Wenn das Item komplett aus dem Warenkorb entfernt wurde - GEHT NICHT ZUVERLÄSSIG if (shopliste[i][4] == 0) //Wenn die Anzahl eines Artikels Null ist { for(var e = 0; e < einkauf.length; e++) { if (shopliste[i][0] == einkauf[e]) //Wenn der Name des Items in der Einkaufsliste vorkommt { einkauf = einkauf.slice(0, e).concat(einkauf.slice(e + 1)); } } } } } //Ausgabe der Liste einkauf.sort(); einkaufausgabe = einkauf.join(", "); document.getElementById('ausgabe').innerHTML = "Im Einkaufswagen: <b>" + einkaufausgabe + "</b><br />"; }
Ich musste erstmal einen Zähler für das Array einkauf einrichten, in dem nur die Namen der eingekauften Sachen vorhanden sind. Dann wurde nicht richtig geprüft, ob das Item, dessen Anzahl auf 0 dezimiert wurde, im Einkaufskorb ist (if (shopliste[0] == einkauf[e][0])) - da muss die Arrayposition "[0]" weg, damit es funktioniert.
Mit dem Code oben gehts nun wie gewollt! :D
Beitrag zuletzt geändert: 10.10.2010 4:35:55 von ai-tenshi -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage