【问题标题】:JavaScript / jQuery: How to properly use setTimeout before redirectJavaScript / jQuery:如何在重定向之前正确使用 setTimeout
【发布时间】:2015-06-29 18:44:25
【问题描述】:

我是 JS 新手,希望有人可以帮助我。

我正在尝试淡出一个 div,然后等待两秒钟,然后重定向到另一个页面。

到目前为止,我有以下根据需要进行重定向,但我认为我没有正确使用 setTimeout,因为重定向总是立即发生,与我为超时设置的值无关。

谁能告诉我我必须如何组合它以便 JS 在重定向之前等待?如果可能的话,我想使用 setTimeout 而不是延迟等。

setTimeout(function(){ $(that).closest('div.boxBlueOuter').fadeOut(), 2000 });
// redirect to index page
window.location.href = baseURL + '/index.php?lang=' + selectedLang;

提前非常感谢, 迈克

【问题讨论】:

    标签: javascript jquery settimeout


    【解决方案1】:

    .fadeOut() 可以接受回调,这就是它的样子

    .fadeOut([持续时间] [,完成])

    首先使用淡出并在回调中有 2 秒超时然后重定向。 应该这样做。

    $(that).closest('div.boxBlueOuter').fadeOut(function(){
      setTimeout(function(){
        window.location.href = baseURL + '/index.php?lang=' + selectedLang;
      }, 2000);
    });
    

    【讨论】:

    • 太棒了 - 非常感谢!正是我想要的。我会尽快接受。 :)
    【解决方案2】:

    很遗憾,setTimeout 不是实际 EcmaScript 规范的一部分,因此它的行为在执行环境中可能不一致。

    那是根据https://developer.mozilla.org/en-US/docs/Web/API/WindowTimers/setTimeout说的

    Firefox 中的setTimeout 将在指定的延迟后执行传入的函数。当前,您指定在 2 秒延迟后淡出。相反,您想像这样在 2 秒延迟后重定向

    $(that).closest('div.boxBlueOuter').fadeOut()

    setTimeout(function(){ window.location.href = baseURL + '/index.php?lang=' + selectedLang;}, 2000 );

    我建议使用标准化的东西并避免 setTimeout。

    【讨论】:

    • 也非常感谢!您能否就“标准化”的含义给我一些提示?因为我是编程新手,所以它会帮助我从一开始就做事。 :)
    • 当前的 ECMAscript(它标准化了最初并且仍然最常被称为 JavaScript)标准位于此处ecma-international.org/ecma-262/6.0。如果你是新手,它可能不会对你有多大好处,因为它是复杂的阅读。那是 2015 版(又名 6)。大多数浏览器仍然只支持版本 5。确定浏览器对特定功能的支持的一个很好的资源是 caniuse.com
    • 谢谢你 - 我测试了你的代码并且它工作正常,看起来你可能需要在最后删除一个大括号。关于浏览器支持,哪个现代浏览器会遇到 setTimeout 方法的问题?延迟会是更好的选择吗?
    • stackoverflow.com/questions/8852198/… 解释了为什么 setTimeout 不是 ECMAScript 的一部分。
    • @DhirajBodicherla:谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-27
    • 2015-06-08
    • 1970-01-01
    • 2016-04-05
    相关资源
    最近更新 更多