En el siguiente ejemplo de código, la función de devolución exitosa registra 'entrada # 04.update' cuatro veces en lugar de cada entrada individual, lo cual tiene sentido para ver cómo funcionan los cierres, pero ¿cómo haré para cada uno? entrada individual usando esto.AJAX Cierres y segmentación 'esto'
<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)
}
});
});
}
Eso es increíble ... pero ... ¿podría decirme una razón técnica para hacer eso? Quiero decir, a veces me olvido de agregar 'var' ... y no he tenido problemas. Pero tus palabras son aterradoras, y de ahora en adelante no me olvidaré de agregar 'var'. De todos modos ... ¿tienes una explicación técnica para este tipo de problemas? – Cristian
El motivo: su controlador 'success', función anónima hace referencia a una variable' $ this' que es global. Entonces, cada una de las 4 instancias de esta función anónima hace referencia a la misma variable y, por lo tanto, al mismo valor, ya que se ejecutan mucho después de que la función 'each' haya regresado. – Alsciende
@Cristian: sin la 'var', es una variable global que está actualizando cada bucle, no local para el alcance de este cierre, en este caso lo quiere que sea. –