@@betking99
document.addEventListener('DOMContentLoaded', function () { function rechne() { var bnahrung = document.getElementById('bnahrung'), bholz = document.getElementById('bholz'), bsilber = document.getElementById('bsilber'); bspnahrung = document.getElementById('bspnahrung'); bspholz = document.getElementById('bspholz'); bsilber = document.getElementById('bsilber'); var summe = bnahrung.valueAsNumber / 1000 + bholz.valueAsNumber * 3 / 160 + bsilber.valueAsNumber * 5 / 40 + bspnahrung.valueAsNumber * 1500 + bspholz.valueAsNumber * 4500 + bspsilber.valueAsNumber * 7500; summe = summe.toFixed(0); document.getElementById('betrag1').value = summe; } document.getElementById("myForm1").addEventListener("input", rechne); });
-
Die Elemente im DOM ändern sich doch nicht, oder? Es macht also keinen Sinn, die Elemente bei jedem Aufruf der Eventhandlerfunktion
rechne()
immer und immer wieder mitdocument.getElementById()
herauszusuchen. Das müsste einmalig geschehen, also außerhalb vonrechne()
.Globale Variablen sind auch keine gute Idee. (
bnahrung
,bholz
,bsilber
sind bei dir lokal – so wie’s sein soll –;bspnahrung
,bspholz
,bsilber
sind ohne Schlüsselwortvar
global.)Mittlerweile gibt es die Schlüsselwörter
let
undconst
, die bevorzugt anstelle vonvar
zu verwenden sind.BTW, mit
summe = summe.toFixed(0);
halte ich für schlechten Programmnierstil. Du weist du der Variablensumme
einen neuen Wert zu, und zwar von einem völlig anderen Typ (String) als dem, den sie vorher hatte (Number). Sowas würde ich vermeiden. -
macht es keinen Sinn, die Elemente im gesamten DOM zu suchen. Du rufst sowieso
document.getElementById("myForm1")
auf; das kann man sich in einer Variablen merken und die anderen Elemente müssen nur darin gesucht werden:const myForm1 = document.getElementById('myForm1'); const bnahrung = myForm1.getElementById('bnahrung'); const bholz = myForm1.getElementById('bholz');
-
macht es keinen Sinn, die Elemente überhaupt zu suchen. Wenn das
form
-Element und die darin enthaltenen Eingabe-Elementename
-Attribute tragen (was sie tun sollten), dann liegen bereits Referenzen zu diesen vor:<form name="myForm1"> <label for="bnahrung">Nahrung:</label> <input name="bnahrung" id="bnahrung"/> ⋮ </form>
Das
form
-Element ist perdocument.forms['myForm1']
verfügbar; ohne dass man nochmal danach suchen müsste.Eingabe-Elemente per
document.forms['myForm1'].elements['bnahrung']
usw.Beachte, dass das Eingabe-Element
name
- undid
-Attribute hat. Die Zuordnung der Beschriftung (for
-Attribut deslabel
-Elements`) bezieht sich auf die ID.
🖖 Stay hard! Stay hungry! Stay alive! Stay home!
“Turn off CSS. If the page makes no sense, fix your markup.” —fantasai