2

我有一个在页面加载时实例化的方法。该方法触发两个事件,window.onload 和 image.onclick。问题是在任何给定时间只有一个事件有效(即:如果我评论image.onclick方法,window.onload方法有效)。我如何让两者都工作?

这在 Firefox (mozilla) 中可以正常工作,但在 IE 中不行

例子

test.method = function()
{
    window.onload = this.doSomeWork;

    for (i = 0; i < images.length; i++) {
        var image = images[i];
        image.onclick = this.imageClickEvent;

    }
}
4

5 回答 5

1

在页面加载时触发 test.method 后,您使用新值覆盖您的 window.onload:this.dosomework,因此在主体加载的时间范围内,您调用第一个函数,然后立即覆盖,然后第二个函数采用结束,然后执行...您是否尝试将 window.onload 语句推到 test.method 的底部?我猜如果功能块太长,第二个 window.onload 永远不会执行,因为窗口已经完成加载,它的毫秒数,但仅此而已

显然在Firefox中,该功能在被覆盖之前执行,或者可能附加到当前的onload,不确定技术性。再次尝试将 onload 推到底部,看看会发生什么

您不应该在正文加载后调用的任何其他函数中真正调用 onload 函数,因为无论您多么小心,您都不能依赖于加载时间框架足够长以包含两个事件的事实,您应该追加到窗口.onload 在调用(或完成)body 标签之前确保事件被捕获。

于 2009-03-03T22:42:12.560 回答
1

我们的问题是您只能有一个 onload 事件。

我建议 yuu 尝试使用此处的 addEvent 方法:

http://ejohn.org/projects/flexible-javascript-events/

于 2009-02-27T20:09:41.883 回答
1

问题中没有足够的信息来弄清楚出了什么问题,但要查看的内容包括:

  • doSomeWork() 或 imageClickEvent() 中的代码是否期望收到一个指向任何特定内容的“this”?因为它不会,当您将方法从其所有者对象中剥离以分配给事件处理程序时。

  • 是否有另一种写入 window.onload 或 image.onclick 的方法,您可能会覆盖它?

于 2009-02-27T20:26:35.790 回答
0

使用 Firefox 3 查看页面上的代码。然后打开 Firefox 错误控制台 (Ctrl Shift J) 以查看哪一行中断了。然后使用新信息更新您的问题。

于 2009-02-27T19:49:14.383 回答
0

也许您应该在这里添加一个事件侦听器,而不是尝试捕获 window.onload?

于 2009-03-03T22:27:19.617 回答