Windows onload不从外部脚本触发

时间:2012-08-03 12:45:14

标签: javascript asp.net .net visual-studio-2010

好的,我知道这已被问了很多,但似乎没有一个解决方案对我有用。这是情况。我有一个网页,我需要添加到现有的网站,这个网站使用我无法触摸的母版页。这限制了我使用javascripts window.onload,因为我无法访问body标签。

在我的页面上,我将外部.js文件链接到每个其他外部文件下方的头部。这是我的.js文件的示例。

var myobj = null;
(5 or so functions that work properly. Mainly just toggles that show and hide divs. none touch the onload)
function load(){
myobj = document.getElementById("my_element");
alert("test");
}
window.onload = load;

试过这个并且加载功能永远不会触发,因为我从未收到警报。我已经尝试在加载函数中注释掉第一行,但只是没有警报,仍然没有。环顾四周我也发现了另一种方法,我尝试了没有成功。其他一切都是一样的,除了我删除了window.load并添加了它。

function addLoadEvent(func) {
var oldonload = window.onload;
if (typeof window.onload != 'function') {
    window.onload = func;
} else {
    window.onload = function () {
        if (oldonload) {
            oldonload();
        }
        func();
    }


  }
}
addLoadEvent(load);
addLoadEvent(function () {
    /* more code to run on page load */
    alert("hello2");
});

在此功能中,两个警报都不会触发。我也尝试在函数之外放置一个警报,一个确实有效。

我使用的浏览器是IE 8.0.7600.16385和Chrome 21.0.1180.60

如果您需要更多信息,请与我们联系。

哦,作为旁注,我不能使用jquery或任何其他javascript库,因为我们试图保持尽可能轻。此页面也必须在IE8中运行,这是目前仅支持浏览器的企业。如果它也适用于Chrome,那将会很棒。

修改的 如果我以完全错误的方式解决这个问题,我想要做的就是跟踪我拥有的最后一个元素。我基本上有一个有2列的页面,左边是菜单,右边是内容。内容全部放在div中,一次只显示一个类别。它应该工作的方式是单击菜单类别时它隐藏了以前的内容并显示新内容。

我已将内容类设置为display:none;并将start_content ID设置为display:block;。 Javascript应该做的是使用start_content对象初始化我的全局。在菜单中单击时,它调用一个执行obj.style.display ='none'的函数,然后将新obj设置为display ='block'。然后它接受新的obj并将其放在我的全局变量中,以便在下一个菜单点击时进行更改。

这是一个没有任何onload函数的例子

var prevContent = document.getElementById("start_content");
function toggle(id) {
prevContent.style.display = "none";
var content = document.getElementById(id);
content.style.display = "block";
prevContent = content;
}

这个问题是当prevContent进入切换功能时,它无法识别。我假设这是因为我在头部链接这个.js文件,所以页面还没有加载我的start_content,这就是为什么我改变它以将全局声明为null然后设置window.onload到创建后设置适当的值。

1 个答案:

答案 0 :(得分:0)

在头部的脚本标签中添加“Defer”最终完成了这一操作。