2
  $('.toggle').toggle(function(){
    var ul = $('ul');
    ul.fadeOut('fast', function(){
      ul.fadeIn('fast').removeClass('off');
      ul.addClass('on');
    });
  }, function(){
    ul.fadeOut('fast', function(){
      alert('wtf'); // <- never gets here...
      ul.fadeIn('fast').removeClass('on');
      ul.addClass('off');
    });
  });

私は何を間違っていますか??

2 番目の fadeOut コールバック関数内に追加したコードは実行されません...

4

3 に答える 3

3

var ul = $('ul');2番目の関数も入れてください。

于 2011-04-05T02:21:46.070 に答える
2

ulは 2 番目のコールバックで定義されていません。スコープを変更して、両方のコールバックから見えるようにします。

var ul = $('ul');

$('.toggle').toggle(function(){
  ul.fadeOut('fast', function(){
    ul.fadeIn('fast').removeClass('off');
    ul.addClass('on');
  });
}, function(){
  ul.fadeOut('fast', function(){
    ul.fadeIn('fast').removeClass('on');
    ul.addClass('off');
  });
});

これ以外のスコープに入らない場合ulは、自己呼び出し関数でラップするか、 のul各コールバック内で を指定しますtoggle()

于 2011-04-05T02:21:19.257 に答える
2

変数ulが 2 番目の関数のスコープに存在しません。以下も機能するはずなので、実際にはあなたのケースでは少し不要な最適化です。

  $('.toggle').toggle(function(){
    $('ul').fadeOut('fast', function(){
      $(this).fadeIn('fast').removeClass('off').addClass('on');
    });
  }, function(){
    $('ul').fadeOut('fast', function(){
      $(this).fadeIn('fast').removeClass('on').addClass('off');
    });
  });
于 2011-04-05T02:23:56.540 に答える