2011-04-28 35 views
0

我有一个需要用肢体的onload事件JavaScript的冲突全身多处的onload事件,必须先在

它应该是简单的解决方案多javasripts - 只需添加所有事件行是这样的:

<body onload="showContent(); 
    randomImages(); 
    placeIt(); 
    showIt(); 
    preloadImgs(); 
    initialize()"> 

但当然生活并不那么简单.. 出于某种原因一些脚本需要排在第一位。因此,如果我先将showContent();放入,randomimages将不会执行,反之亦然。

我也试图与脚本替代onload事件这样

if (typeof window.addEventListener != "undefined") 
    window.addEventListener("load", showContent, false); 
else if (typeof window.attachEvent != "undefined") { 
    window.attachEvent("onload", showContent); 
} 
else { 
    if (window.onload != null) { 
     var oldOnload = window.onload; 
     window.onload = function (e) { 
      oldOnload(e); 
      showContent(); 
     }; 
    } 
    else 
     window.onload = showContent; 
} 

到目前为止,我有这个矛盾没有解决方案。有人有好主意吗?

+0

如果函数不抛出错误,它们将被顺序执行。所以我假设'showContent'在某种程度上失败了,阻止了以下的执行。 – 2011-04-28 09:53:49

回答

0

为什么不创建另一个函数来保存所有这些函数,然后在加载时调用该函数?这假设你的函数没有其他函数的依赖。

showContent();randomImages();placeIt();showIt();preloadImgs();initialize() 

可以是多一点有组织的位置:

function Init() 
{ 
     showContent(); // if this errors out, execution for the rest stops 
     randomImages(); 
     placeIt(); 
     showIt(); 
     preloadImgs(); 
     initialize(); 
} 
0

@Felix克林你是部分正确的,那么它们就顺序,但每个功能的执行时间会有所不同发起的,因此有可能创建一个竞争条件,序列中的最后一个函数可以完成之前序列中的第一个完成。

这个问题的答案是建立在你的函数回调。然后你可以对它们进行排序,只有当前一个函数完成时才会调用后续函数。 关于这个问题here有一个很好的答案。

不过我还有一点。尽量避免使用Body Onload组合,而是使用Jquery的document .ready()函数。这是因为Body Onload可以在加载所有内容之前触发 - 我认为这在JQuery网站here上有更好的解释。

+0

实际上$(document).ready比body.onload更早触发。 onload事件将在加载图像时触发。 jquery文档就绪在加载DOM时触发,并且可以安全地操作。这意味着脚本可以在图像加载的同时运行,从而使网站的加载速度更快。 – Marcus 2012-03-12 08:21:00