在另一个脚本之后有一个脚本开火?

时间:2011-08-05 02:44:13

标签: javascript jquery

我正在使用两个同时触发的脚本。他们似乎引起了冲突。我的问题是如何在另一场火灾之后让一个人开火半秒到一秒钟?我认为这可能会解决我遇到的问题。

我正在使用jQuery,但我不确定如何解决这个问题。

由于

注意我没有在这里发布脚本,因为它们是不敬的。我只需要知道如何延迟一个射击直到另一个射击。我最后要点击的是位于HTML底部的另一个位于头部。这两个脚本在他们的工作中彼此完全无关。

编辑 这个问题源于我发布的另一个问题。在这里 - Javascript/Fancybox Error? - 我想到了它并想尝试添加延迟,但我也很好奇如何添加与我遇到的问题无关的延迟。

4 个答案:

答案 0 :(得分:6)

两个脚本无法同时触发。 Javascript是单线程的,并且没有两个脚本同时运行。一个将运行完成,然后下一个将运行。如果两者之间存在冲突,那么它与脚本的编写方式有关,我们只能通过查看脚本和导致它们运行的​​上下文来帮助您解决问题。

此外,在加载脚本时尝试在head标记中运行的任何内容都可能无法操作浏览器DOM,因为它尚未到位。它必须被延迟,直到DOM成功加载并准备好进行操作。

很容易让一个javascript函数调用另一个javascript函数:

function doStuff1() {
    // do doStuff1 stuff
    doStuff2();
}

function doStuff2() {
    // do doStuff2 stuff
}

doStuff1();   // call doStuff1 which will also call doStuff2

您现在又添加了一部分问题。你问如何实现延迟。您可以使用计时器在将来的某个时间运行某些代码:

setTimeout(doStuff2, 5000);    // run doStuff2() in 5 seconds

答案 1 :(得分:5)

如果您想首先运行fancybox,请使用fancybox onComplete回调:

$j(document).ready(function(){
    $j('#start').fancybox({

        'onComplete': function () {
            Engine.Initialize();
        }

    });
});

否则,在调用自定义初始化函数后放入fancybox代码:

$j(document).ready(function(){
    Engine.Initialize();

    $j("#start").fancybox({
        'padding' : 0
    });
});

答案 2 :(得分:2)

jfriend00的帖子是正确的,但以下内容完全符合您的要求:

// Ensure that all scripts have been loaded.
$(document).ready(function(){

    // Call first script.
    doFistThing();

    // Set a 1 second delay that starts AFTER the first script has completed.
    setTimeout(function(){

        doSecondThing();

    }, 1000);


});

答案 3 :(得分:1)

我不确定完全不相关的脚本是如何相互影响的,可能这些不相关的脚本正在影响他们使用的全局属性,因此会变得疯狂。 JS中有一个概念允许您并行运行两个JS脚本,这称为Web worker。 jquery家伙John Resig很久以前发表了一篇文章,我发现它使用谷歌。 http://ejohn.org/blog/web-workers/。使用Web worker,您可以在一秒钟或任何时间后启动第二个脚本。我不是JS忍者,但我认为它可以帮到你。但是,在你发布你的代码时,其他人很难向你推荐一些东西。在查看您的编辑后,我建议您在JS中探索settimeout。同一篇文章http://ejohn.org/blog/how-javascript-timers-work/

中的另一个链接