Announcement

Collapse
No announcement yet.

Preiskalkulation programmieren mit JavaScript (als Anfänger)

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Preiskalkulation programmieren mit JavaScript (als Anfänger)

    Guten Tage Liebe Entwickler,

    ich habe vor 2 Wochen mit dem Programmieren lernen begonnen.
    Nun bin ich soweit, dass ich zumindest eine einfache Preis-Kalkulation mit Häkchen setzen kann und dann der Preis dieses Zusatzprodukts einer vorhandenen Summe auf einem HTML Dokument mittels JavaScript hinzufügen oder abziehen kann.
    Die vorhandene Summe ist dabei das Hauptprodukt (hier eine Gartentoranlage) und die Zusatzprodukte sind Zubehörelemente. Beim Häkchen z.B. Griff für das Törchen.
    Leider hänge ich seit einigen Stunden am folgenden Problem: Die Preise für ein Zusatzprodukt werden mit Häkchen der Gesamtsumme hinzuaddiert (durch Eventlistener 'click' auf dem Kästchen ausgelöst). Beim zweiten klicken wird der Wert dann wieder von der Summe abgezogen, weil das Häkchen dann ja wieder entfernt wird. Soweit so gut.
    Nun habe ich jedoch ein Problem mit der Eingabe einer Anzahl eines Zusatzprodukts. Das Zusatzprodukt "Handsender zur elektrischen Toröffnung" kostet 36€ pro Stück und kann bis zu 30x hinzugefügt werden. Wenn im Anzahl-Input Feld die Zahl eingetragen wird, welches dann mit der Summe 36€ multipliziert wird, dann wird das Ergebnis dem Gesamtbetrag des Produkts hinzugefügt. Das klappt auch - aber nur beim ersten mal. Das Problem ist nämlich, dass bei der zweiten Änderung z.B. von 5 Stück auf 7 Stück nicht 2 Stück hinzugefügt werden, sondern noch mal 7 Stück. Es sollte jedoch nur die Differenz sein, da es ja nur 2 Stück mehr sind als zuvor. Der Eventlistener bei dem Zusatzprodukt mit Anzahlauswahl wird über einem Input-Eventlistener aktualisiert und der Gesamtsumme hinzugefügt. Als Programmieranfänger sehe ich hier nur die Möglichkeit, mit der Differenz der Anzahl zu arbeiten. Jedoch weiß ich nicht genau, wie ich die Differenz zwischen Inputwert und vorherigem Wert herausbekomme. Immer wenn ich den Code durchführe kommt der aktuelle Wert dabei heraus, sodass auf dem vorherigen Inputwert nicht zugegriffen werden kann.

    Unten habe ich euch mal den Code hinterlassen inkl. HTML, konnte die Dateien leider nicht anhängen. Es geht hier noch nicht um die Optik ;-)
    Eventuell müsste man bei meinem Vorhaben mit einer Datenbank arbeiten?

    Freue mich auf eure Antworten.
    Euer JavaScript Anfänger



    HTML Code:

    </head>
    <body bodyID>



    <h1>Preis deines Gartentors:</h1>
    <h1 SummenText1 id="SummenText">1000</h1>
    <div id="Zubehoer">
    <input type="checkbox" antrieb name="Mit_Antrieb" id="Mit_Antrieb" >

    <label for="Mit Antrieb">Mit Antrieb</label>
    <input type="checkbox" handsender id="handsenderCheckbox" name="Mit Handsender" >
    <label for="Mit Antrieb">Mit Handsender</label>
    <input value="0" type="number" min="0" max="30" anzahl id="main">Bitte Anzahl wählen</input>
    <input type="checkbox" warnleuchte id="warnleuchte" name="Mit Warnleuchte" id="Warnleuchte">
    <label for="Mit Antrieb">Mit Warnleuchte</label>
    <button data-clickme>50 € Trinkgeld geben</button>
    <button data-clickit>50 € Trinkgeld zurücknehmen</button>


    JavaScript Code (separate Datei):

    window.onload = function () {

    AnzahlCheck.hidden=true


    }


    function textModified(Mein_Text,x,y ) {
    var Mein_Text_parse= parseFloat(Mein_Text.textContent)
    var y = parseFloat(AnzahlCheck.value)
    window.alert("x ist" + x + "vorherige Summe ist" + Mein_Text_parse + "aktuelle Anzahl ist" + y )

    var NeuesErgebnisOhneVariable = x+Mein_Text_parse-y
    var neuesErgebnis= NeuesErgebnisOhneVariable + y + y


    Mein_Text.innerHTML= neuesErgebnis



    }
    const clickMe = document.querySelector('[data-clickme]')
    const clickIt = document.querySelector('[data-clickit]')
    var Mein_Text = document.querySelector('[SummenText1]')
    const antriebCheck = document.querySelector('[antrieb]')
    const handsenderCheck = document.querySelector('[handsender]')
    const warnleuchteCheck = document.querySelector('[warnleuchte]')
    var AnzahlCheck = document.getElementById('main');




    clickMe.addEventListener('click', button => {
    textModified(Mein_Text, 50)
    })
    clickIt.addEventListener('click', button => {
    textModified(Mein_Text, -50)
    })
    antriebCheck.addEventListener('click', check => {
    if (antriebCheck.checked) {
    textModified(Mein_Text, 649)
    } else {textModified(Mein_Text, -649)}
    })

    handsenderCheck.addEventListener('click', check => {
    if (handsenderCheck.checked) {
    addHandsenderAnzahl();
    } else removeHandsenderAnzahl(); window.alert("Vorsicht: Sie haben keine Handsender mehr!"); }
    )
    main.addEventListener('input', check => {

    getSumOfHandsender();
    textModified (Mein_Text, 0, 0);
    })


    warnleuchteCheck.addEventListener('click', check => {
    if (warnleuchteCheck.checked) {
    textModified(Mein_Text, 49)
    } else {textModified(Mein_Text, -49)}
    })


    function addHandsenderAnzahl () {

    AnzahlCheck.hidden=false

    }
    function removeHandsenderAnzahl () {

    AnzahlCheck.hidden=true

    }


    function getSumOfHandsender() {

    var AlteAnzahl = parseFloat(AnzahlCheck.value)
    window.alert( AlteAnzahl + 'ist die AlteAnzahl' )
    SummeHandsender= AlteAnzahl * 36
    return SummeHandsender
    }




    Starts
    12.07.2021
    Ends
    12.07.2021

  • #2
    Warum wurde das in den Terminkalender hier im Forum eingetragen?
    Christian

    Comment


    • NewCoding98
      NewCoding98 commented
      Editing a comment
      Hatte mich wohl verklickt und konnte diesen nicht mehr entfernen. Sorry.

  • #3
    Kann überhaupt keinen relevanten Code zu der Frage finden, mit der Ausnahme "getSumOfHandsender". Dort wird etwas mit 36 multipliziert.
    Das irgendwo 7 hinzugefügt werden kann ich nicht erkennen ("von 5 Stück auf 7 Stück nicht 2 Stück hinzugefügt werden, sondern noch mal 7")
    Warum?
    Warum wird nicht der Wert hinzugefügt, der in einem Feld steht?
    Warum wird in addHandsenderAnzahl irgendwas hidden gemacht.
    Bei einer Änderung sollten alle bisherigen Ergebnisse verworfen werden und eine komplette Neuberechung durchgeführt werden
    Warum nicht folgende Vorgehensweise:

    Alle Eingabefelder bekommen ein onChange Ereignis.
    Findet eine Änderung statt, wird in dem onChange die Berechung für alles durchgeführt.
    Fertig
    Man muss da nicht mit Differenz o.a. arbeiten
    Christian

    Comment


    • NewCoding98
      NewCoding98 commented
      Editing a comment
      Hidden weil die Auswahl erst zu sehen sein soll, wenn man ein Häkchen setzt.
      Danke für die Antwort!
      Ich werde es mal probieren.

  • #4
    Mal als kleine Anregung: https://codepen.io/PHProcks/pen/OJmwqVM?editors=1010

    Du hast hauptsächlich CheckBoxes und einen Button als Kriterien für Zubehör. Eine Checkbox ist abhängig von der Eingabe einer Menge.
    Das habe ich mit den data-Attributen gelöst: Sobald eine Checkbox geklickt wird wird geprüft, ob sie eine Referenz zu einem Input-Feld hat. Wenn ja, wird der Wert des Zubehör mit dieser Menge multipliziert und auf den Basis-Preis raufgerechnet.

    Wie Christian Marquardt auch schon schrieb, würde ich bei jeder Änderung komplett alles neu berechnen, dann muss man weniger beachten.
    Ich gehe also immer vom Grundpreis aus und lasse bei Klick auf eine Checkbox, dem Button oder dem change Event des Mengen-Feldes alle neu berechnen.

    Durch die Verwendung der data-Attribute, ist es problemlos möglich, die Zubehör-Artikel zu erweitern, ohne dass man am JS etwas ändern muss.
    PHP rocks!
    Eine Initiative der PHP Community

    Comment


    • #5
      Was haltet ihr den von meinem Weg?
      https://basti1012.bplaced.net/index....r-forum&id=295


      Mögliche Wege gibt es ja viele.
      Zuletzt editiert von basti1012; 22.08.2022, 21:23.
      Ich mach keine Rechtschreibfehler - ich schreib Freestyle!
      Erreichbar in mein Javascript-forum und in Facebook-Chat

      Comment


      • #6
        Natürlich kann man das auch so machen. Der große Nachteil an Deiner Lösung ist halt, dass Du bei einem neuen Zubehör direkt Dein JavaScript anpassen musst, das musst Du bei mir grundsätzlich nicht.
        Bei mir habe ich das zwar noch nicht auf die Anzahl der Handsender runtergebrochen, aber auch das kann man mit Siblings skalierbar machen, so dass man auch an der Stelle nichts ändern muss.
        PHP rocks!
        Eine Initiative der PHP Community

        Comment

        Working...
        X