设置超时不工作在jQuery sequnce

问题描述:

我有一个jQuery函数写在下面。我想在函数中发生的是,.fadeToggle消除不需要的元素,之后选定的div将pod扩展类应用于其自身。由于某种原因,每当我添加setTimeout函数wrapping toggleClass podexpanded toggleClass展开部分不起作用。没有setTimout函数工作正常,但我需要延迟代码的第二部分,直到第一部分完成。设置超时不工作在jQuery sequnce

这里是我的代码:

jQuery(document).on('click', '.portfoliopod', function(){ 





jQuery('.portfoliopod').not(jQuery(this)).fadeToggle(500); 


setTimeout(function() { 
jQuery(this).toggleClass('podexpanded'); 
    }, 600); 



jQuery(this).toggleClass("portfolioimagezoom"); 


    jQuery(this).children(".portfoliopodmessage").toggleClass('hidepod'); 


setTimeout(function() { 
    jQuery(".portfolioimage").toggleClass('portfolioimagelarge'); 

}, 400); 
}); 
+2

You ca不要在'setTimeout'里面使用'this'。当函数运行时,'setTimeout'将'this'设置为'window'。 – 2014-10-10 18:54:30

任何的setTimeout调用之前,添加:

var th = jQuery(this); 

然后在超时功能,我们日,而不是jQuery的(这)是这样的:

th.toggleClass('podexpanded'); 
+0

作品!谢了哥们 – 2014-10-10 19:02:43

fadeToggle的第三个参数允许你以供应fadeToggle的动画完成后执行的函数。

jQuery(document).on('click', '.portfoliopod', function() 
{ 

    jQuery('.portfoliopod').not(jQuery(this)).fadeToggle(500, 'swing', function() 
    { 
     $(this).toggleClass('podexpanded'); 
    }); 
}); 

$(document).ready(function() 
 
{ 
 

 
    $("#test").hide(); 
 
    
 
    $("#test").fadeToggle(500, 'swing', function() 
 
    { 
 
    $(this).addClass('a_new_class').html('Update to this text after fadein in original div.'); 
 
    }); 
 
    
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div id="test">My text</div>

+0

由于超时不起作用的原因不起作用。在函数内使用“this”是指该函数。 – Brian 2014-10-10 19:02:54

+0

使用$(this)指的是也应用了fadeToggle的原始选择元素,而不是被调用的函数。在这种情况下绝对没有理由使用setTimeOut。我添加了一个示例代码片段。 – Venice 2014-10-10 19:17:36

+0

请参阅我编辑回答的例子。它演示了我所说的完美。 'this'参照调用方法的对象,而不是方法本身。这,我的朋友,是基本的JavaScript。 – Venice 2014-10-10 19:39:58