2011-09-01 87 views
0

我想将窗口滚动到顶部,暂停我的动画1秒,然后使用fadeOut擦除内容,但此代码不起作用,您知道为什么吗?setTimeOut jquery问题

$('#link').bind('click', function(){ 
    preloading.show(); 

    $('html,body').animate({'scrollTop':0}, 300, function(){ 
     $('#myDiv').setTimeout(function(){ 
      $(this).empty() 
       .append(conteneurBio).hide() 
       .fadeIn('slow', function(){ 
        preloading.hide(); 
       }); 
     }, 1000); 
}); 
+1

你可以定义“不工作”?它有什么作用? –

+0

我的可疑性让我在setTimout()回调中放置了一个'console.log(this)',以确保它是我的想法。 –

+1

'setTimeout'是一个全局函数,而不是一个jQuery方法。 –

回答

2

这不会工作吗?

$('html,body').animate({'scrollTop':0}, 300, function() { 
     $('#myDiv') 
      .empty() 
      .hide() 
      .append(conteneurBio)    
      .delay(1000) 
      .fadeIn('slow', function() { preloading.hide(); } 
    }); 
+0

+1这看起来像是唯一一个有机会在实际工作中的解决方案。 – jfriend00

+0

其实在这里工作:http://jsfiddle.net/jfriend00/zynNW/。 – jfriend00

+0

@Tomm:谢谢Tomm,它工作得很好,我起初尝试过,但我想我错过了一些东西。最后一件事,我想在empty()方法之前使用fadeOut(),我试图在empty()之前放置它,但结果是(按此顺序):empty()/ fadeIn()/ fadeOut() )然后另一个fadeIn()...?任何想法?谢谢 – Paul

2

你错过了一组关闭}); S的:

$('#link').bind('click', function(){ 
    preloading.show(); 

    $('html,body').animate({'scrollTop':0}, 300, function() 
    { 
     setTimeout(function(){ 
      $('#myDiv').empty() 
       .append(conteneurBio).hide() 
       .fadeIn('slow', function(){ 
        preloading.hide(); 
       }); 
     }, 1000); 
    }); 
}); 
+0

-1由于几个原因,此代码不起作用。 'setTimeout'不是jQuery方法,当setTimeout触发时'this'被设置为'window'对象,所以你不能在'setTimeout'函数中使用它来引用一些以前的DOM或jQuery对象。 OP真的需要在错误控制台中查看javascript错误。 – jfriend00

+0

@ jfriend00:你能详细解释一下吗?似乎是为我工作:http://jsfiddle.net/HMJEn/ –

+0

是的,像你的jsFiddle中的一个局部变量在setTimeout中可用,但不是''this'。在调用setTimeout回调函数之前,这由javascript引擎重置。看到这个jsFiddle的例子:http://jsfiddle.net/jfriend00/akxuz/。 – jfriend00

0

使用类似:http://jsbeautifier.org/ 它可以帮助你找到任何失踪括号/括号在JavaScript,尤其是当你不有一位编辑为你做缩进。

约瑟夫张贴在我面前的正确答案,但你错过了“});”在末尾

+0

感谢您的回答 – Paul