2009-02-27 155 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以確保事件被捕獲。