kostenloser Webspace werbefrei: lima-city


JS: Element aus dem Array entfernen

lima-cityForumDie eigene HomepageHTML, CSS & Javascript

  1. Autor dieses Themas

    ai-tenshi

    ai-tenshi hat kostenlosen Webspace.

    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
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!