Script trotzdem ausführen, auch wenn Variable nicht da ist, nicht existiert!
bearbeitet von Rolf BHallo Franz,
so weit, so gut, und Du denkst richtig.
> Uncaught TypeError: element.value is undefined
Das ist die Firefox-Meldung? Chrome meldet
> Uncaught TypeError: Cannot read property 'replace' of undefined
Was auf's gleiche hinausläuft, weil replace ja auf das Ergebnis von `element.value` angewendet wird.
Tatsächlich zeigt diese Fehlermeldung aber, dass Du zwei Problemstellen hast. Einmal beim Aufruf von getElementAsFloat, und einmal innerhalb von getElementAsFloat. Die Frage, warum `element.value` zu undefined ausgewertet wird, braucht schon etwas Spürsinn.
Frage 1: Welcher Wert entsteht aus `document.formular_n.Wert4n`, wenn es das Feld Wert4n nicht gibt?
Frage 2: Und welcher Wert entsteht dann aus `document.formular_n.Wert4n || 0`?
Frage 3: Wenn der so entstehende Wert in `getElementAsFloat` hineingegeben wird, was entsteht dann aus `element.value`?
Frage 4: Ist das `|| 0` in Frage 2 eine gute Idee? (Tipp: Die Antwort lautet „Nein“)
Frage 5: Wie kannst Du in `getElementAsFloat` mit der Situation umgehen, dass dass in `element` das Ergebnis aus Frage 1 hereinkommt? (Tipp: `if`)
Zum Beantworten solcher Fragen kann es helfen, sich Teilergebnisse anzuschauen. Im Firefox musst Du aber von https auf http zurückschalten (in der Adresszeile das s von https entfernen und ENTER drücken), sonst bekommst Du den Sourcecode im Ergebnisfenster nicht zu sehen. Du findest ihn dann im Zweig fiddle.jshell.net / 2bwLfxz5/show / (index).
Setze in der Debugger-Ansicht der Firefox-Entwicklertools einen Breakpoint auf die `let summe_1 = ...` Zeile (Klick auf die Zeilennummer davor, es kommt ein ~~roter Punkt~~ blauer Pfeil (roter Punkt ist Chrome) - nochmal klicken entfernt ihn).
Tipp eine Ziffer in eins der Eingabefelder, und er sollte anhalten.
Schau Dir dann an, welche Werte die fraglichen Teilausdrücke von oben ergeben. Das geht entweder durch Eintippen der Teilausdrücke in die Konsole, oder mit der Maus. Halte die Maus einfach mal über `Wert4n` in `document.formular.Wert4n`. Bei komplexeren Ausdrücken geht das nicht mehr, du kannst aber den fraglichen Ausdruck mit der Maus markieren, rechte Maustaste drücken und "evaluieren in Konsole" nutzen.
Um `element.value` zu untersuchen, muss er natürlich erstmal in die Funktion hineingelaufen sein. Einen Einzelschritt in eine Funktion hinein machst Du mit der F11-Taste. Mit der F8-Taste setzt Du den Programmablauf fort. Wenn
_Rolf_
--
sumpsi - posui - obstruxi
Script trotzdem ausführen, auch wenn Variable nicht da ist, nicht existiert!
bearbeitet von Rolf BHallo Franz,
so weit, so gut, und Du denkst richtig.
> Uncaught TypeError: element.value is undefined
Das ist die Firefox-Meldung? Chrome meldet
> Uncaught TypeError: Cannot read property 'replace' of undefined
Was auf's gleiche hinausläuft, weil replace ja auf das Ergebnis von `element.value` angewendet wird.
Tatsächlich zeigt diese Fehlermeldung aber, dass Du zwei Problemstellen hast. Einmal beim Aufruf von getElementAsFloat, und einmal innerhalb von getElementAsFloat. Die Frage, warum `element.value` zu undefined ausgewertet wird, braucht schon etwas Spürsinn.
Frage 1: Welcher Wert entsteht aus `document.formular_n.Wert4n`, wenn es das Feld Wert4n nicht gibt?
Frage 2: Und welcher Wert entsteht dann aus `document.formular_n.Wert4n || 0`?
Frage 3: Wenn der so entstehende Wert in `getElementAsFloat` hineingegeben wird, was entsteht dann aus `element.value`?
Frage 4: Ist das `|| 0` in Frage 2 eine gute Idee? (Tipp: Die Antwort lautet „Nein“)
Frage 5: Wie kannst Du in `getElementAsFloat` mit der Situation umgehen, dass dass in `element` das Ergebnis aus Frage 1 hereinkommt? (Tipp: `if`)
Zum Beantworten solcher Fragen kann es helfen, sich Teilergebnisse anzuschauen. Im Firefox musst Du aber von https auf http zurückschalten (in der Adresszeile das s von https entfernen und ENTER drücken), sonst bekommst Du den Sourcecode im Ergebnisfenster nicht zu sehen. Du findest ihn dann im Zweig fiddle.jshell.net / 2bwLfxz5/show / (index).
Setze in der Debugger-Ansicht der Firefox-Entwicklertools einen Breakpoint auf die `let summe_1 = ...` Zeile (Klick auf die Zeilennummer davor, es kommt ein roter Punkt).
Tipp eine Ziffer in eins der Eingabefelder, und er sollte anhalten.
Schau Dir dann an, welche Werte die fraglichen Teilausdrücke von oben ergeben. Das geht entweder durch Eintippen der Teilausdrücke in die Konsole, oder mit der Maus. Halte die Maus einfach mal über `Wert4n` in `document.formular.Wert4n`. Bei komplexeren Ausdrücken geht das nicht mehr, du kannst aber den fraglichen Ausdruck mit der Maus markieren, rechte Maustaste drücken und "evaluieren in Konsole" nutzen.
Um `element.value` zu untersuchen, muss er natürlich erstmal in die Funktion hineingelaufen sein. Einen Einzelschritt in eine Funktion hinein machst Du mit der F11-Taste. Mit der F8-Taste setzt Du den Programmablauf fort. Wenn
_Rolf_
--
sumpsi - posui - obstruxi
Script trotzdem ausführen, auch wenn Variable nicht da ist, nicht existiert!
bearbeitet von Rolf BHallo Franz,
so weit, so gut, und Du denkst richtig.
> Uncaught TypeError: element.value is undefined
Das ist die Firefox-Meldung? Chrome meldet
> Uncaught TypeError: Cannot read property 'replace' of undefined
Was auf's gleiche hinausläuft, weil replace ja auf das Ergebnis von `element.value` angewendet wird.
Tatsächlich zeigt diese Fehlermeldung aber, dass Du zwei Problemstellen hast. Einmal beim Aufruf von getElementAsFloat, und einmal innerhalb von getElementAsFloat. Die Frage, warum `element.value` zu undefined ausgewertet wird, braucht schon etwas Spürsinn.
Frage 1: Welcher Wert entsteht aus `document.formular_n.Wert4n`, wenn es das Feld Wert4n nicht gibt?
Frage 2: Und welcher Wert entsteht dann aus `document.formular_n.Wert4n || 0`?
Frage 3: Wenn der so entstehende Wert in `getElementAsFloat` hineingegeben wird, was entsteht dann aus `element.value`?
Frage 4: Ist das `|| 0` in Frage 2 eine gute Idee? (Tipp: Die Antwort lautet „Nein“)
Frage 5: Wie kannst Du in `getElementAsFloat` mit der Situation umgehen, dass dass in `element` das Ergebnis aus Frage 1 hereinkommt? (Tipp: `if`)
Zum Beantworten solcher Fragen kann es helfen, sich Teilergebnisse anzuschauen. Im Firefox musst Du aber von https auf http zurückschalten (in der Adresszeile das s von https entfernen und ENTER drücken), sonst bekommst Du den Sourcecode im Ergebnisfenster nicht zu sehen. Du findest ihn dann im Zweig fiddle.jshell.net / 2bwLfxz5/show / (index).
Setze in der Debugger-Ansicht der Firefox-Entwicklertools einen Breakpoint auf die `let summe_1 = ...` Zeile.
Tipp eine Ziffer in eins der Eingabefelder, und er sollte anhalten.
Schau Dir dann an, welche Werte die fraglichen Teilausdrücke von oben ergeben. Das geht entweder durch Eintippen der Teilausdrücke in die Konsole, oder mit der Maus. Halte die Maus einfach mal über `Wert4n` in `document.formular.Wert4n`. Bei komplexeren Ausdrücken geht das nicht mehr, du kannst aber den fraglichen Ausdruck mit der Maus markieren, rechte Maustaste drücken und "evaluieren in Konsole" nutzen.
Um `element.value` zu untersuchen, muss er natürlich erstmal in die Funktion hineingelaufen sein. Einen Einzelschritt in eine Funktion hinein machst Du mit der F11-Taste. Mit der F8-Taste setzt Du den Programmablauf fort. Wenn
_Rolf_
--
sumpsi - posui - obstruxi