Verschachtelte If Else Funktionn gibt mir immer nur letzte Else zurück

  • Hallo zusammen


    Ich bin Rookie im Bereich der Programmierung und habe erst vor ca. einem Monat mit HTML/CSS/JS angefangen. Aus diesem Grund sehe ich manchmal die Fehler nicht und hoffe auf euren Input ^^


    Ich habe eine verschachtelte If Else Funktion ( unter function holeplan() ). Irgendwie zeigt es mir immer nur die letzte Else-Funktion an. Was mache ich falsch?


    Danke euch!


    PS: Lasst euch nicht von diesen knalligen Farben irritieren, die brauchte ich als Orientierung für die Arbeit mit DIV Layouts :D wie gesagt, Rookie..


    Code
  • Ich weiß gar nicht wo man da anfangen soll.

    1. Lade deinen Code nächstes mal als Text hoch , oder bei der größe mache bei Codepen eine Testseite fertig.

    Dann hast du unmengen Code zu viel ,der gar nicht nötig ist und kürzer auch geht.

    Zb deine Else kram um den es geht

    das sind 5128 Zeichen.

    und so

    Nur noch 3006 Zeichen.

    Du siehst das es schon einiges sparen kann und es übersichtlicher ist ( nicht getestet aber sollte so gehen )


    Du wunderst dich warum du immer das letzte bekommst bei dein else .?

    Hast du mal das eingebaut ,vor den else if Zweig ?

    Code
    1. console.log(zielzu+''+wei)

    Dann bekommst du NaN bei wei raus.

    wei ist deine Variable die das select Feld "Ernährungsweise" abfragen tut.

    Da hast du das gemacht

    Code
    1. var wei = parseInt(document.getElementById('weise2').value);

    weiter Nachricht 2

  • Nachricht 2

    So. Jetzt Googel mal was parseInt() macht und du wirst erfahren das du das da nicht gebrauchen kannst.


    Ob das jetzt der einzige Fehler ist weiß ich nicht , aber das ist das, was mir auf der schnelle aufgefallen ist.

    Habe aber auch noch nicht alle durch gescheckt was du da berechnen tust .

    Ich denke mal das man das alles mit der Hälfte an Code auch hinbekommen tut.


    Wenn du Lust hast, dann erklär mal kurz was du da genau berechnen willst ,

    vielleicht kann man dann den ganzen Code mal neu machen und mindestens 200 Zeilen Code daraus schmeißen.

    Irgendwie kann ich in den Feldern eingeben, was ich will,ich komme mit den Ergebnis nie höher als 400 und somit trifft auch kein else zu


    Habe das mal bei Codepen reinkopiert damit die anderen Leute das auch sehen können die keine Dateien hier herunterladen.

    https://basti1012.bplaced.net/…rdner=html-seminar&id=421

    Denk dran das du da noch einige parseint raus machen mußt .

    Ich habe da jetzt noch nix dran geändert, weil du sollst ja auch was lernen und selber versuchen.

    Aber helfen tue ich dir trotzdem, wenn du nicht weiter kommst

  • Hi Basti


    Wow! Ich danke dir!!!


    zu 1. Cooler Tipp, kannte ich gar nicht! Mir ist bewusst, dass ich extrem viel Code habe, der nicht sein müsste.. wie gesagt, bin so neu dabei und habe mich schon immens gebessert, sauberer zu schreiben.. aber mir ist definitiv bewusst, dass da noch viel Verbesserungspotenzial vorhanden ist.


    Gott, das mit

    Code
    1. var = out;
    2. if (....

    Ist so naheliegend aber so entfernt! Das wird mir definitiv nicht mehr passieren


    2. Das ist ja schon fast peinlich... ich weiss, was parseInt macht, aber habe nicht sauber gearbeitet, sondern von oben kopiert...


    Ich bin froh, dass du mir den Code nicht fertig präsentierst. Denn so habe ich vieles bisher super selbst gelernt, idem ich es selber korrigiert habe.


    Ich werde mal die Anpassungen vornehmen und schauen, was da rauskommt. Das ist komisch, bei mir kommen realistische Zahlen (Grundumsatz immer mind. 1400kcal oder so und bei der Zielzufuhr immer über 2000kcal, halt je nach Input.

  • bei den Kcal bekomme ich auch immer 2000 und mehr raus.

    Aber bei den else zweig bekomme ich bei deinen Variabel

    zielzu nicht mehr als 400 raus und deswegen kann auch keine else if greifen .


    Und hier sind auch noch Fehler.

    Vieleicht fällt es dir ja auf

    Code
    1. var ge = parseInt(document.getElementById('gewicht2').value);
    2. var al = parseInt(document.getElementById('gewicht2').value);
    3. var ge = parseInt(document.getElementById('geschlecht2').value);
    4. var ge1 = (geschlecht === '2') ? 655.1 : 66.47 ;

    Das kann so auch nicht richtig funktionieren.


    An besten schmeißt du fast alles bei der funktion holeplan() raus, weil du das oben bei der berechnung schon alles gemacht hast.

    Wenn du neigirig bist dann kucke bei meinen Link , ansonsten versuche es selber mal wie ich das meine.

    Bei mir passt jetzt auch das Ergebniss und co

  • Du könntest deinen else Zweig nochmal um 2000 Zeilen kürzen.

    Endergebniss würde dann so aussehen

    Oder sehe bei Codepen.


    Was soll eigentlich das setInterval machen ? weil er auch auf 100ms steht ?


    Dein html passt auch nicht ganz, da werden die div und spans nicht richtig geschlossen

  • Ach herrjeee... Mein Fazit: Ich arbeite zu unsauber..... die bei var al angesteuerte Id ist 'gewicht2'


    Das mit den vorher definierten var's habe ich auch gedacht, da var ja globale Variabeln sind, jedoch hat es irgendwie nicht funktioniert... vielleicht auch, weil sonst was im Code nicht stimmte :) Danke dir !

  • Wow! Das ist heftig! Ich muss mich noch weiter in JS einarbeiten bzw. was dieser Code genau bedeutet und wie es funktioniert. Ganz so wird es nicht gehen, da ich schlussendlich will, dass der richtige Ernährungsplan angezeigt wird (ohne '1500 bis 1700 und Alles'). Da würde ich für jeden möglich Plan einen Div Block erstellen und mit document.getElementById("ID DES ERNÄHRUNGSPLANS").style.display = "inline-block"; arbeiten. Oder gibt es da eine einfachere Variante?


    Es wird ein Bild und ein Button sein, der auf eine andere URL Seite verweist.



    Der setInterval soll in sehr kleinen Schritten das Ergebnis bei "Total Stunden (ohne Sport):" automatisch aktualisieren, damit man sofort sieht, wie viele Stunden man eingetragen hat, damit man auf 24h kommt (ohne zuerst auf Berechnen zu klicken)

  • Der setInterval soll in sehr kleinen Schritten das Ergebnis bei "Total Stunden (ohne Sport):" automatisch aktualisieren, damit man sofort sieht, wie viele Stunden man eingetragen hat, damit man auf 24h kommt (ohne zuerst auf Berechnen zu klicken)

    du meinst das so ?

    Wenn man in den Feldern neue Werte eingeben tut , sollen die ergebnisse gleich angezeigt werden i

    ohne das man berechnen klickt ?


    Dafür gibt es den change oder keypüress ,keyup Event was auf Tastendruck oder so das Ergebniss dann errechnen würde.

    Solche Tasten oder change Events sind perdormance Technischer besser als ein Interval laufen zu lassen .


    Deine Css könnte man auch noch anders machen.


    Wow! Das ist heftig! Ich muss mich noch weiter in JS einarbeiten bzw. was dieser Code genau bedeutet und wie es funktioniert. Ganz so wird es nicht gehen, da ich schlussendlich will, dass der richtige Ernährungsplan angezeigt wird (ohne '1500 bis 1700 und Alles'). Da würde ich für jeden möglich Plan einen Div Block erstellen und mit document.getElementById("ID DES ERNÄHRUNGSPLANS").style.display = "inline-block"; arbeiten. Oder gibt es da eine einfachere Variante?

    an besten zeigst du mir mal da ein beispiel , wie du das genau meinst.

    Aber wie du jetzt schon sehen kannst gibt es da bestimmt auch einfachere LÖösung.


    Aufjedefall mußt du dir Javascript noch gut ankucken.

    Du siehst ja das ich fast 90% deines Codes schon auskommentiert habe weil es auch einfacher geht mit wenniger Code