【问题标题】:Why am I getting this Javascript runtime error?为什么我会收到此 Javascript 运行时错误?
【发布时间】:2010-09-15 18:35:57
【问题描述】:

我的网页上有以下 JavaScript...

64    var description = new Array();
65    description[0] = "..."
66    description[1] = "..."
...
78    function init() {
79        document.getElementById('somedivid').innerHTML = description[0];
80    }
81
82    window.onload = init();

在 Microsoft Internet Explorer 中,它会导致以下错误...

发生了运行时错误。
您要调试吗?

线路:81
错误:未实现

第 79 行按预期执行。

如果第 79 行被注释掉,它仍然会抛出错误。

如果我注释掉第 82 行,那么函数不会执行,也没有错误。

【问题讨论】:

    标签: javascript html internet-explorer


    【解决方案1】:

    第 82 行不应该是:

    window.onload = init;
    

    当您执行“init()”时,它是对返回 void 的函数的调用。您最终会在页面加载之前调用该函数。

    【讨论】:

    • window.onload = init();将 Init 的结果分配给 window.onload,它需要一个函数指针。这是我认为的错误。
    • 几个很好的答案。但是,我接受这个,因为它只需要两次击键。
    【解决方案2】:

    要保留任何以前设置的 onload 函数,试试这个

    var prevload = window.onload;
    window.onload = function(){
        prevload();
        init();
    }
    

    【讨论】:

    • 先检查是否设置了prevload:prevload && prevload();
    • 您应该改用 attachEvent/addEventListener(如果您不止一次这样做,则将其抽象出来)。
    • @Ates Goral:如果这就是它的样子,那真是太棒了。
    【解决方案3】:

    尝试为“load”添加一个事件监听器,或者使用声明性语法<body onload="init()">。

    编辑:此外,说 window.onload = init(); 将 window.onload 设置为调用 init() 的结果。你的意思是window.onload = init;(一个lambda表达式)。这仍然是不好的做法,因为它会覆盖可能绑定到 window.onload 的其他内容。

    【讨论】:

    • 其实这很好。窗口加载后将执行 onload 事件处理程序。
    • 不过,我不明白为什么这值得一票否决。错了吗?
    • 删除第 82 行并更新正文标签,如所描述的那样有效。
    • 您可以在任意位置设置 onload 处理程序。它甚至可能是您在 . 下的第一个
    【解决方案4】:

    除了这里提出的 onload 修复,还要检查是否有多个元素具有该 ID,我相信 IE 将返回具有该 ID 的所有元素的集合,在这种情况下,您需要选择预期的项目在访问该属性之前退出集合,或确保您使用的是唯一 ID。

    【讨论】:

      【解决方案5】:

      尝试在启用 FireBug 插件的 FireFox 中运行它。这将允许您调试 javascript

      【讨论】:

        猜你喜欢
        • 2016-06-30
        • 1970-01-01
        • 2017-10-20
        • 2012-05-31
        • 1970-01-01
        • 1970-01-01
        • 2018-06-22
        • 2016-01-01
        相关资源
        最近更新 更多