jquery停止方法导致ie6堆栈溢出

问题描述:

我在我的web应用程序中有六个菜单选项,当用户将鼠标悬停在链接上时(ul> li> a),我切换图像以显示上下文相关的照片,并淡化图像进出。但是,我注意到,当用户在链接之间快速移动鼠标时,队列无法正常处理,用户通常会悬停在链接上并显示前一个悬停的旧图像。经过一番阅读后,似乎正确的做法是使用stop()方法,但是当我尝试并实现它时,ie6报告堆栈溢出。jquery停止方法导致ie6堆栈溢出

这是我的旧代码(其中有老人形象的问题):

if(webImage != 'img/template/slide_web.png') { 
         $('#slide img').fadeOut(function() { 
          $(this).load(function() {$(this).fadeIn(); }); 
          $(this).attr('src','img/template/slide_web.png'); 
         }); 

这是我的新代码(它解决了老问题,但会导致IE6堆叠在第一行溢出):

if(webImage != 'img/template/slide_web.png') { 
         $('#slide img').stop(true, true).fadeOut(function() { 
          $(this).load(function() {$(this).stop(true, true).fadeIn(); }); 
          $(this).attr('src','img/template/slide_web.png'); 
         }); 

我正在实施stop()方法吗?或者有另外一种方法可以避免jQuery淡入淡出队列丢失吗?

的问题是这一行:

$(this).load(function() {$(this).stop(true, true).fadeIn(); }); 

要绑定一个​​处理程序(虽然功能相同)每个一次你淡出,所以你需要或者将它绑定一次,这个范围之外,或.unbind(),就像这样:

$(this).unbind('load').load(function() {$(this).stop(true, true).fadeIn(); }); 

不这样做,它试图一次全部运行那些负载处理程序,一些它不能手le,实际上,它正在连续执行.stop(true, true).fadeIn()很多次。

+0

谢谢,这使得事情更稳定一些,但是现在当我通过启动另一个图像来中断一个图像的褪色时,现在我在ie6中发生了堆栈溢出。这让我回想起关于stop()函数的想法。 – Nick 2010-06-21 13:40:52

+0

现在我刚刚用这个插件替换了我的代码,工作正常:) http://www.hieu.co.uk/blog/index.php/imageswitch/ – Nick 2010-06-21 14:09:55

+0

@Nick - (嗨其他尼克!)它取决于在效果上,但我认为在这种情况下你会想'.stop(true)',而不是尝试先完成当前动画,这是第二个参数的作用:) – 2010-06-21 14:50:13