Hier ist, was wir versuchen zu tun:Unter Verwendung der gleichen Variablen in zwei Funktionen in Javascript
$(document).ready(function()
{
for (var i = 0; i < 10; i++)
{
for (var j = 0; j < 15; j++)
{
$('#Row'+(i+1)+'Sub' + (j+1) + '_ClientDropDown').ready(function()
{ TrimServices_Function("Row" + (i+1) + "_Sub" + (j+1).ToString() + "_ClientDropDown"); })
}
}
})
Leider ist Javascript nicht wirklich die i und j in die zweite Funktion korrekt übergeben. Wenn Warnungen in anderen Tests tun erstellt es eine Linie mit der rechten ersten Anruf, aber dann der andere Teil gibt nur 10 und 15 können also sagen, Linie 5 sub 7 wäre:
$('#Row5Sub7_ClientDropDown').ready(function()
{ TrimServices_Function("Row11_Sub16_ClientDropDown"); })
Wie würden wir gehen darum, sicher, dass wir Linien durchlaufen, wo die Reihe und Unter übereinstimmen?
Es ist richtig funktioniert. Sie erstellen eine Schließung für Variablen, die ihre Werte jedes Mal durch die Schleifen ändern. Der Wert dieser Variablen bei der späteren Ausführung der Funktion erfasst also den endgültigen Wert dieser Variablen und nicht den Wert zu dem Zeitpunkt, zu dem die Funktion an ready() übergeben wurde. Das ist das richtige Verhalten für Verschlüsse. – RJM
Hier ist eine Antwort auf dieses Problem: http://stackoverflow.com/questions/750486/javascript-closure-inside-loops-simple-practical-example – RJM
Ersetzen Sie 'var' in Ihren for-Schleifen mit' Let'. –