0

私はこのコードを持っています:

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」を認識しません。うまくやるには?

4

2 に答える 2

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

他にもいくつかの問題がありますが、質問へのコメントはすでにそれらのいくつかに対処しています!

于 2012-05-30T16:54:06.603 に答える
0

これは、従来のスコーピングの問題のもう 1 つの例です。iすべてのコールバックで共有される変数は 1 つだけです。iコールバックごとにローカルを作成する必要があります。コールバックの変更:

function(){
    this.tabs[i].step = 1;
}

に:

(function(i){
    return function(){
        this.tabs[i].step = 1;
    }
})(i)
于 2012-05-30T16:53:59.357 に答える