In dem Codebeispiel protokolliert die Erfolgsrückruffunktion die Eingabe # 04.update viermal statt jeder einzelnen Eingabe individuelle Eingabe mit diesem.AJAX Closures und Targeting 'this'
<input type="text" name="" id="01" class="update">
<input type="text" name="" id="02" class="update">
<input type="text" name="" id="03" class="update">
<input type="text" name="" id="04" class="update">
function updateFields(){
$('input.update').each(function(){
$this = $(this);
$.ajax({
data: 'id=' + this.id,
success: function(resp){
console.log($this);
$this.val(resp)
}
});
});
}
Das ist erstaunlich ... aber ... könnten Sie mir einen technischen Grund dafür geben? Ich vergesse manchmal, 'var' hinzuzufügen ... und ich hatte keine Probleme. Aber deine Worte sind gruselig, und von jetzt an werde ich nicht vergessen, 'var' hinzuzufügen. Wie auch immer ... hast du eine technische Erklärung für diese Art von Problemen? – Cristian
Der Grund: Ihr 'success'-Handler, anonyme Funktion, verweist auf eine Variable $ this, die global ist. Jede der 4 Instanzen dieser anonymen Funktion referenziert also die gleiche Variable und daher den gleichen Wert, da sie lange nach der Rückkehr der 'each'-Funktion ausgeführt werden. – Alsciende
@Cristian - Ohne die 'var' ist es eine globale Variable, die Sie jede Schleife aktualisieren, nicht lokal für den Bereich dieser Schließung, den Sie in diesem Fall haben wollen. –