Gleiches Problem mit der JS-Abschlussschleife - aber die Antworten von SO funktionieren nicht [duplizieren]

8

Ich habe alle Millionen Duplikate des gleichen alten JavaScript-Closure-Loop-Problems gelesen. Ich dachte, ich hätte sie verstanden, und ich benutze seit Monaten Schließungen ohne Probleme. Ich bin ratlos.

%Vor%

Wenn ich jedes eindeutige Formular einsende - bekomme ich immer eine Warnung für das letzte Element der Gruppen [i] [j]. Offensichtlich mache ich etwas Dummes, was ist es? Ich dachte, dass ich durch das Erstellen der anonymen Funktionen groups2, i2 und j2 das Problem gelöst habe.

    
George B 16.01.2013, 21:50
quelle

3 Antworten

8

Die Funktion, die Sie an .live() übergeben, wird ausgeführt , wenn das Sendeereignis ausgelöst wird . Zu diesem Zeitpunkt haben i und j ihre endgültigen Werte. Sie müssten den Abschluss außerhalb des Ereignishandlers erstellen:

%Vor%

Beachten Sie, dass ich das Argument groups aus der anonymen Funktion entfernt habe. Es gibt keine Notwendigkeit, darüber zu schließen, da sein Wert sich nicht ändert. Ich habe auch den gesamten Funktionsausdruck in Klammern eingeschlossen, was die Konvention ist (und in diesem Fall tatsächlich erforderlich ist, um zu erzwingen, dass sie als Ausdruck geparst wird).

Beachten Sie auch, dass ich die schließenden Klammern, die Sie nach dem ersten Argument haben, zu .live() in Ihrer Frage entfernt habe. Es sollte nicht da sein.

Randnotiz .

.live() und .die() sind seit Ewigkeiten veraltet. Verwenden Sie .on() (mit jQuery 1.7+) oder .delegate() (mit älteren Versionen).

    
James Allardice 16.01.2013, 21:54
quelle
0

Ihr Code richtet groups.length squared live submit-Handler ein. Jeder Live-Handler besteht aus einer anderen Kopie dieser Funktion:

%Vor%

Wenn das Submit-Ereignis eintritt, werden alle Live-Handler-Dateien aufgerufen, die jeweils auf den letzten Wert von i und j verweisen.

Es ist schwer zu sagen, was Sie wirklich wollen, basierend auf dem Code-Fragment, mit mehr Informationen könnte ich wahrscheinlich mehr helfen. Viel Glück!

    
jimbojw 16.01.2013 21:55
quelle
-1

Probieren Sie es aus

%Vor%     
Theodosis 16.01.2013 21:54
quelle

Tags und Links