2012-04-05 5 views
1

Also, ich habe diesen einfachen CodeEiniger Wert Callback-Funktion

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

Die i oberen als nur eine Variable var i=0 deklariert wird, aber in Rückruf-Funktion Ich kann es nicht sehen ...

+1

Es könnte hilfreich sein, wenn Sie ein größeres Code-Snippet gepostet haben. –

+0

zeigen Sie Ihren vollständigen Code. Wo Sie i deklariert haben, und auch ein wenig von Ihrem html, das eine ID hat, die mit "info_name" beginnt – DG3

+0

Wenn Sie 'var i = 0;' in dem Umfang der oben genannten Funktionen haben, ist 'i' definitiv zugänglich der Rückruf –

Antwort

2

Es liegt ein Problem mit dem Bereich i vor. Da i im äußeren Gültigkeitsbereich deklariert ist, verweisen alle Rückrufe auf denselben i, dh, wenn i geändert wird, werden auch alle Referenzen von Rückrufen auf i geändert.

Sie können eine Funktion zum Generieren des Callbacks erstellen, da in diesem Fall ein neuer Bereich erstellt wird. Der Wert i bleibt erhalten.

Basierend auf der ursprünglichen Frage, vereinfachte ich den Code ein wenig. Sie haben seit es bearbeitet, und ich kann den Rückruf nicht mehr finden ... aber hoffen, dass diese ya

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 helfen könnten: http://jsfiddle.net/vd9Mj/

UPDATE:

Wo ist Ihr Rückruf. ..? Es scheint, dass Sie es von der Frage entfernt haben.

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

ich bin nicht sicher, dass dies tun, was Sie wollen, auch wenn i verfügbar war - wenn Sie Ihre Callback-Funktion wollen, ist das Element beeinflussen der Event-Handler an, verwenden $(this):

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

Nein, ich brauche ich Variable verwenden, weil es aktuelle Elemente ID-Nummer hat. Es wird an anderer Stelle erscheinen, mit verschiedenen verschiedenen Elementen. – NoNameZ

Verwandte Themen