Dans l'exemple de code ci-dessous, la fonction de rappel de succès enregistre quatre fois l'entrée # 04.update 'plutôt que chaque entrée individuelle, ce qui est logique pour voir comment fonctionnent les fermetures. entrée individuelle en utilisant cela.AJAX Fermetures et ciblage '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)
}
});
});
}
C'est incroyable ... mais ... pourriez-vous me dire une raison technique de le faire? Je veux dire, j'oublie parfois d'ajouter 'var' ... et je n'ai pas eu de problèmes. Mais vos mots sont effrayants, et à partir de maintenant je n'oublierai pas d'ajouter 'var'. De toute façon ... avez-vous une explication technique pour ce genre de problèmes? – Cristian
La raison: votre gestionnaire 'success', la fonction anonyme fait référence à une variable' $ this' qui est globale. Ainsi, chacune des 4 instances de cette fonction anonyme fait référence à la même variable et donc à la même valeur, puisqu'elles sont exécutées longtemps après que la fonction 'each' soit retournée. – Alsciende
@Cristian - Sans le 'var', c'est une variable globale que vous mettez à jour chaque boucle, pas locale à la portée de cette fermeture que vous voulez qu'elle soit dans ce cas. –