2009-02-27 161 views
2

我有一个在页面加载时实例化的方法。该方法激发两个事件,window.onload和image.onclick。问题是在任何特定时间只有一个事件作品(即:如果我评论image.onclick方法,window.onload方法工程)。我如何得到这两个工作?Javascript - onload,onclick事件

这工作正常,在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; 

    } 
} 
+0

“这在Firefox(mozilla)中正常工作,但不在IE中” - 我希望每次有人说这个时候我都会有一个镍::D – BoltBait 2009-02-27 19:57:54

回答

0

看与Firefox 3页面上的代码,然后打开Firefox的错误控制台( Ctrl Shift J)查看哪条线断裂。然后用新信息更新你的问题。

1

问题我们,你只能有一个onload事件。

我建议优应该尝试的addEvent方法在这里找到:

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

+0

只有一个onload事件。另一个是onclick事件。你的意思是说可以有onload或onclick事件吗? – 2009-02-27 20:33:30

1

有没有真正足够的信息,在这个问题弄清楚发生了什么事情不对,但事情在寻找包括:

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

  • 是否有另一种方法写入window.onload或image.onclick,你可能会重写?

0

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

0

当您在页面加载时触发test.method之后,您将用新值覆盖window.onload:this.dosomework,因此在body加载的时间范围内,您调用第一个函数,然后立即覆盖,然后第二个函数接管,并执行......您是否尝试将window.onload声明方式推到test.method的底部?我猜如果功能块太长,第二个window.onload永远不会执行,因为窗口已经完成加载,它的毫秒,但这就是所有这一切需要

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

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