回调函数的一些价值

时间:2012-04-05 15:11:38

标签: javascript jquery jquery-ui jquery-callback

所以,我有这个简单的代码

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

i被声明为变量var i=0,但在回调中,函数我看不到它......

2 个答案:

答案 0 :(得分:3)

我不确定这会做你想要的,即使i可用 - 如果你希望你的回调函数影响事件处理程序所附加的元素,请使用$(this):< / p>

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

答案 1 :(得分: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/

更新:

你的回调在哪里?看来你已经从问题中删除了它。

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);
    }
});
​