Существует проблема с номером i
. Поскольку i
объявлен во внешней области видимости, все обратные вызовы будут ссылаться на тот же i
, что означает, что если изменяется i
, все обратные вызовы ссылаются на i
.
Что вы можете сделать, так это создать функцию для генерации обратного вызова, так как в этом случае создается новая область, значение i
будет сохранено.
Основываясь на исходном вопросе, я немного упростил код. Вы с тех пор редактировали, и я не могу найти функцию обратного вызова больше ... но надеюсь, что это может помочь Я.
var getCallback = function(index) {
return function(){
// You can see how this index is being captured correctly in Javascript console
console.log(index);
$('#name' + index).show('slide',{direction: "up"}, 1000)
};
};
for (var i = 0; i < 3; ++i) {
$('#name'+i).show("slide", {direction: "right"}, 1000, getCallback(i));
}
JSFiddle: http://jsfiddle.net/vd9Mj/
UPDATE:
Где ваш обратный вызов. ..? Кажется, вы удалили его из вопроса.
var i=-1;
var doStuff = function(index) {
$('.third').append('<div class="showinfo"><h3 id="info_name'+i+'" class="info_name">'+contact_name[index]+'</h3><span class="info_info" id="info_info'+index+'"><strong>'+contact_information[0][0]+'</strong>: '+contact_number[index]+'</span></div>');
$('#info_name'+index).show("slide", {direction: "right"}, 1000);
$('#info_info'+index).delay(1000).show('slide',{direction: "up"}, 1000, function() {
// Insert code for callback.
});
};
$.each(contact_status, function(key, value){
i++;
if(value == info_id){
doStuff(i);
}
});
Это может помочь, если вы разместили более подробный фрагмент кода. –
показать полный код. Где вы объявили i, а также разместите бит своего html, который имеет идентификатор, начинающийся с «info_name» – DG3
Если у вас есть 'var i = 0;' в области содержимого вышеперечисленных функций, 'i' определенно доступен в пределах обратный вызов. –