2012-04-05 2 views
1

Итак, у меня есть простой кодНекоторые значение для обратного вызова функции

$('#info_name'+index).show("slide", {direction: "right"}, 1000, function(){ 
    $('#info_info'+index).show('slide',{direction: "up"}, 1000); 
}); 

i объявлен верхний, как только переменная var i=0, но в обратном вызове функции я не могу видеть его ...

+1

Это может помочь, если вы разместили более подробный фрагмент кода. –

+0

показать полный код. Где вы объявили i, а также разместите бит своего html, который имеет идентификатор, начинающийся с «info_name» – DG3

+0

Если у вас есть 'var i = 0;' в области содержимого вышеперечисленных функций, 'i' определенно доступен в пределах обратный вызов. –

ответ

2

Существует проблема с номером 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); 
    } 
}); 
​ 
3

Я не уверен, что это будет делать то, что вы хотите, даже если i был доступен - если вы хотите, чтобы ваша функция обратного вызова, чтобы воздействовать на элемент обработчик событий скрепленный использовать $(this):

$('#info_name'+i).show("slide", {direction: "right"}, 1000, function(){ 
     $(this).show('slide',{direction: "up"}, 1000) 
}); 
+0

нет, мне нужно использовать переменную i, потому что она имеет текущий номер идентификатора элементов. Он появится в другом месте, с разными элементами. – NoNameZ