JS Funktion mehrfach

  • Hallo zusammen,


    ich bin relativ neu in der Webentwicklung und beschäftige mich gerade mit den Grundzügen von JS. Ich möchte für meine Webseite zwei Range-Felder untereinander erstellen, die über ein oninput-Event sofort das Ergebnis am Ende ausgeben. Dies klappt bei der ersten Berechnung schon ganz gut, allerdings habe ich meine Probleme, dies auch auf die zweite Berechnung zu übertragen. Kann mir hier jemand helfen?

    Vielen Dank schon mal und liebe Grüße

    M.


    <!DOCTYPE html>

    <html>

    <body>


    <form oninput=myRange(parseInt(a.value),parseInt(b.value));>

    0<input type="range" id="a" value="50">100

    +<input type="number" id="b" value="50">

    =<output name="x" id="xfield" for="a b"></output>

    </form>

    <br>

    <form oninput=myRange(parseInt(c.value),parseInt(d.value));>

    0<input type="range" id="c" value="25">100

    +<input type="number" id="d" value="25">

    =<output name="x" id="xfield" for="c d"></output>

    </form>


    </body>

    <script>

    function myRange(a1,a2) {

    var x = document.getElementById("xfield")

    x.value = a1 + a2;

    }

    </script>

    </html>

  • Du hast da zwei Elemente mit der ID "xfield". Für den Anfang ist es wahrscheinlich am einfachsten, wenn Du die IDs eindeutig machst und an die Funktion myRange() übergibst:

  • Als Alternative:

    Ich würde auf unnötiges HTML-Gedöns verzichten und eine Form daraus machen, bspw.:

    Das reicht vollkommen, um per JS damit zu arbeiten. Das JS mag auf den ersten Blick etwas komplizierter ausschauen, aber dafür bietet es eine hohe Skalierbarkeit:

    Der Hauptvorteil ist der, dass ich im HTML nun beliebig viele <fieldset> mit gleichem aufbau zufügen kann, das JS braucht nicht angepasst zu werden, es funktioniert bei beliebig vielen, ohne dass ich irgendwelche Parameter übergeben muss o.ä.


    Soll aber nur als Vorschlag und weiterer Möglichkeit dienen.

  • Du hast da zwei Elemente mit der ID "xfield". Für den Anfang ist es wahrscheinlich am einfachsten, wenn Du die IDs eindeutig machst und an die Funktion myRange() übergibst:

    Super! Vielen Dank! Das hat mir echt geholfen :)


    Ich hätte hier noch eine zweite Frage: Ich möchte, dass die beiden beiden Berechnungen nicht erst bei oninput gestartet werden, sondern auch automatisch als onload im body beim Laden der Website. Dies funktioniert auch, wenn ich beide entsprechend in den body-Tag aufnehme:


    <body onload=myRange(parseInt(a.value),parseInt(b.value), "xfield1")

    onload=myRange(parseInt(c.value),parseInt(d.value), "xfield2")>


    Allerdings ist das sehr aufwändig, wenn noch mehr Felder hinzukommen. Wie würde ich das am Sinnvollsten lösen, wenn eine entsprechende Funktion zusätzlich im body als onload-Event gestartet werden soll?


    Danke schon mal.

    Beste Grüße

    Markus

  • Am einfachsten, wenn Du die beteiligten IDs in ein zweidimensionale Array einträgst und darüber eine Schleife legst. In der Schleife dann die Funktion myRange aufrufen mit den IDs als Parameter.


    Alternative: Die drei beteiligten Elemente jeweils z. B. in einem Fieldset gruppieren. Dann eine Schleife über diese Fieldsets und jeweils die Berechnung durchführen.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!