jQuery: Zuweisung von Aufruf einer Funktion mit Parameter an onClick – Parameter kommt falsch bei Funktion an

  • JavaScript

Es gibt 2 Antworten in diesem Thema. Der letzte Beitrag () ist von Marcus Gräfe.

    jQuery: Zuweisung von Aufruf einer Funktion mit Parameter an onClick – Parameter kommt falsch bei Funktion an

    Ich habe derzeit folgendes Problem mit jQuery bzw. JavaScript und ich hoffe, dass zur Lösung nicht mehr Code als unten stehend erforderlich ist, weil der ganze Code ziemlich umfangreich und vor allem viel zu kompliziert ist.

    Ich weise nach dem Fertigladen der Seite dem Button (input type="button") mit der id addARow0 eine onClick-Funktion zu:

    JavaScript-Quellcode

    1. $('#addARow' + i).on('click', function() { generateARow(i); });

    i ist an der Stelle definitiv 0. Das kann ich im Debugger von Firefox sehen und zudem ist addARow0 der Click-Handler zugewiesen.

    Die Funktion

    JavaScript-Quellcode

    1. function generateARow(qIdx) {
    2. // [...]
    3. }

    bekommt als Parameter (wenn ich den Button klicke) aber nicht 0, sondern 1.

    Aber warum? Kann ich oben nicht generateARow(i) machen, also mit nicht fest definiertem Parameterwert?
    Besucht auch mein anderes Forum:
    Das Amateurfilm-Forum
    Passiert das zufällig in einer Schleife mit var i;?
    Falls ja, lautet das Google-Stichwort hier "Closure".

    Wenn nur aktuelle Browser unterstützt werden müssen, sollte es mit let wie erwartet funktionieren, also:

    JavaScript-Quellcode

    1. for(let i = 0; ...; ...) {
    2. $('#addARow' + i).on('click', function() { generateARow(i); });
    3. }


    Bei älteren Browser hilft z.B. dieses Konstrukt:

    JavaScript-Quellcode

    1. for(var i = 0; ...; ...) {
    2. (function(i) {
    3. $('#addARow' + i).on('click', function() { generateARow(i); });
    4. })(i);
    5. }


    Abhängig vom Code gibt es sicher noch bessere Ansätze.

    Edit: Sollte natürlich var in der zweiten Schleife sein.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „3daycliff“ ()