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

我究竟做错了什么??

我在第二个 fadeOut 回调函数中添加的任何代码都不会被执行......

4

3 回答 3

3

也加入var ul = $('ul');你的第二个功能。

于 2011-04-05T02:21:46.070 回答
2

ul未在第二个回调中定义。更改其范围,使其对两个回调都可见。

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超出此范围,请将其包装在自调用函数中或ultoggle().

于 2011-04-05T02:21:19.257 回答
2

该变量ul不存在于第二个函数的范围内。在您的情况下,这实际上是一个不需要的优化,因为以下内容也应该有效:

  $('.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 回答