我有这段代码:
function myClass() {
this.tabs = new Array();
myClass.prototype.focus_tab = function animateTab(nr){
for(i=0;i<this.tabs.length;i++){
$('#' + i + '-image').stop().animate(
{ left: '100px' },
100 , function(){
this.tabs[i].step = 1;
}
);
}
}
但动画结束时的功能无法识别“this.tabs”。 怎么做得好?
答案 0 :(得分:3)
它的范围不同,请尝试:
function myClass() {
this.tabs = new Array();
myClass.prototype.focus_tab = function animateTab(nr){
for(i=0;i<this.tabs.length;i++){
var mytab = this.tabs[i];
$('#' + i + '-image').stop().animate({ left: '100px' }, 100 , function(){
mytab.step = 1;
}
);
}
}
还有一些其他问题,但对这个问题的评论已经解决了其中一些问题!
答案 1 :(得分:0)
这是classic scoping issue的另一个例子。您只有一个i
变量,为您的所有回调共享。您需要为每个回调创建一个本地i
。改变你的回调:
function(){
this.tabs[i].step = 1;
}
要:
(function(i){
return function(){
this.tabs[i].step = 1;
}
})(i)