【问题标题】:windows onload not firing from external scriptwindows onload 未从外部脚本触发
【发布时间】:2012-08-03 12:45:14
【问题描述】:

好的,我知道这已经被问了很多,但似乎没有一个解决方案真正适合我。这是情况。我有一个需要添加到现有站点的网页,该站点使用我无法触摸的母版页。这限制了我使用 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 到创建后设置适当的值。

【问题讨论】:

  • function load();{ 是一个 语法错误 所以如果这真的是代码的样子,那可能就是问题所在。 (那里的分号是问题。)错误控制台当然会告诉你这个。
  • @Pointy 不,不是,那是一个错字。我已经编辑了帖子来解决这个问题。如果它有帮助,这就是 Chrome 的错误控制台显示的“Uncaught TypeError: Cannot read property 'style' of null”,这是在单击菜单、正确执行 2 个函数然后点击执行 prevContent 的函数后发生的.style.display = "none"; 就是那个变量返回为 null。

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


【解决方案1】:

在头部的脚本标签中添加“延迟”最终起到了作用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-08-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多