0

好的,我知道这已经被问了很多,但似乎没有一个解决方案真正适合我。这是情况。我有一个需要添加到现有站点的网页,该站点使用我无法触摸的母版页。这限制了我使用 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 中,一次只显示一个类别。它应该工作的方式是在单击菜单类别时隐藏以前的内容并显示新内容。

我已将我的内容类设置为显示:无;并将 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 到创建后设置适当的值。

4

1 回答 1

0

将“Defer”添加到头部的脚本标签最终起到了作用。

于 2012-08-06T11:08:06.257 回答