Beiträge von Tooley

    Genau, der Button soll dazu dienen, dass der "Kunde" einen Artikel aus dem Warenkorb rauslöschen kann. Er löscht den Gesamtpreis der Tabellenzeile. Danach wird die Summenfunktion ausgelöst, die sämtliche Gesamtpreise aller Zeilen zusammenrechnet und dann die Endsumme des gesamten Warenkorbs ausgibt. Im Endeffekt wird also nur die Endsumme aktualisiert. Als optische Unterstützung habe ich dazu die blend_out Funktion eingebaut, die die Tabellenzeile zusätzlich ausblendet, damit der Kunde auch direkt sieht, dass der Artikel "gelöscht" ist.


    Die Summenfunktion habe übrigens auch nur aufgrund deiner Hilfe basteln können. ;) Die funktioniert. Da brauchen wir nix dran machen.

    Es soll beides ausgeführt werden, was auch geklappt hat, als ich noch onclick anstelle von class="delete" verwendet habe. Lösche ich das <a> weg, löst es auch nicht das Problem. Der Code funktioniert dann immer noch nicht.

    Das mit der Verschachtelung hat mich aber auch schon gestört. Da versuche ich hinterher noch, dass irgendwie zusammenzufassen.


    Habs jetzt erstmal umgeschrieben.

    Code
    1. <td>
    2. <input type="button" value="X" class="delete" onclick="blend_out('zeile1')">
    3. </td>

    Jep, das HTML ist wie oben aufgebaut. Ich habe mal deinen Code kopiert und angepasst. Im Prinzip sind ja nur die letzten beiden <td> wichtig.


    Ich habe schon vermutet, dass <a> ebenfalls als Elternelement zählt und deswegen noch ein parentNode drangehängt, aber das ändert auch nichts.

    Da habe ich gleich das nächste bzw. ein ähnliches Problem. Ich möchte nun eine reset-Funktion schreiben, die ein Inputtextfeld auf Null setzt. Ich habe mich hierbei an obigem Code orientiert und folgendes zusammengebastelt.


    Code
    1. const buttons = document.querySelectorAll('.delete'); //alle delete-Buttons
    2. for (let i = 0; buttons.length > i; i++) {
    3. const thebutton = buttons[i];
    4. thebutton.addEventListener('click', function () {
    5. const totalo = this.parentNode.parentNode;
    6. totalo = totalo.querySelector('.total');        //total = das zu löschende Textfeld
    7. totalo.value = 0;
    8. Summe();
    9. });
    10. }

    Der Code soll alle delete-Buttons sammeln und für jeden einen Eventhandler registrieren. Da dem Code wieder eine Tabelle zugrunde wäre <td> das Elternelement. Ich benötige aber <tr>, da dass zu löschende Textfeld total in einem anderen <td> liegt, als der delete-Button. Demnach habe ich this.parentNode.parentNode geschrieben. Abschließend sollte dann das total-Textfeld auf Null gesetzt und eine Funktion ausgeführt werden. Es klappt nicht. Wo liegt der/ liegen die Fehler?


    PS: Die klassische reset()-Funktion bringt mir nichts, da sie das komplette Form löscht.

    Sorry erstmal, dass ich mich erst jetzt melde und danke für die ausführliche Antwort.

    Da ist einiges an Code dabei, den ich noch nicht kenne. Ich werde mich da reinlesen. Aber im Groben habe ich es denke ich verstanden. Danke!


    EDIT: Ich hab's durchgearbeitet und es funktioniert wunderbar. Dein Code hat mir gleich mehrere neue Dinge beigebracht. Ein paar Verständnisfragen habe ich aber noch.

    1. Wenn man mittels querySelector nach .nr-person sucht, findet er trotzdem die dazugehörigen Klassen, obwohl sie "nr-person adult" und "nr-person child" heißen. Sucht er sich lediglich den Wortlaut "nr-person" raus?

    2. Ist es bei Javascript üblich Variablen in einer Schleifen zu definieren?

    3. Wozu benötige ich das console.log am Ende der summieren() Funktion?

    Hallo,

    ich bin dabei den Warenkorb zu einer Reiseseite zu gestalten und habe hierfür bereits eine Tabelle erstellt. In dieser Tabelle tauchen der Artikel (die Reise), die Personenanzahl, Kinderanzahl, sowie Einzelpreis und Gesamtpreis auf. Mittels + und - Buttons kann die Personen- bzw. Kinderanzahl verändert werden. Dabei werden per "onclick" Funktionen ausgeführt, die die Gesamtpreise berechnen, sowie auch die Summe des Warenkorbs. Mich stört nun, dass ich für jede Artikelzeile jeweils immer die gleichen Funktionen schreiben muss. Ich hätte z.B. gerne eine + Funktion, der die richtigen Parameter übergeben werden, anstatt in jeder Funktion immer nur mit document.getElementByID zu arbeiten. Aber seht selbst.


    Folgendes ist ein JS-Auszug. Diese Funktionen ändern die Personenanzahl und errechnen den Gesamtbetrag. Summe() errechnet die Summenpreis des Warenkorbs.


    Dies ist ein Ausschnitt aus der Tabelle. (Eine Tabellenzeile)


    Der Code funktioniert wie er soll. Aber für jede weitere Zeile, müsste ich beispielsweise die abwählen-Funktion erneut schreiben und dann abwählen1, abwählen2... nennen. Wie kann ich der Funktion die Parameter Kind, Person, Gesamtpreis übergeben, sodass ich die abwählen-Methode nur einmal schreiben muss? Das Problem ist hierbei, dass sich die Werte für Kind oder Person jedes Mal ändern, sodass ich nicht einfach abwählen(2.35, 4, 6) schreiben kann.


    Und ich bin sicher, dass ich den Code etwas kompliziert geschrieben habe. Für generelle Vereinfachungen oder Verbesserungen bin ich auch dankbar.