2013-02-20 67 views
-2

在我的文檔我在這個例子中喜歡這裏給出一個onload功能:JavaScript函數的HTML身體,不會工作

<body onLoad="display()"> 

另外我在文檔的末尾添加一個函數,它改變了一些CSS屬性:

<script> 
window.onload = foo(), bar(); 
</script> 

不知何故整個事情都不起作用!我試圖在文檔的末尾添加所有的函數,但我沒有明白,但不知何故,它們不會觸發!

+6

'的window.onload = FOO(),棒();'調用功能'foo'和'bar'和bar'的'返回值分配給'window.onload'。我建議學習如何調試JavaScript代碼:http://www.netmagazine.com/tutorials/javascript-debugging-beginners。 – 2013-02-20 16:35:31

+0

你看過開發人員工具/ javascript控制檯,看看你得到什麼錯誤? – Offbeatmammal 2013-02-20 16:36:01

回答

3

即將調用這些函數,但它不會爲window.onload分配任何有用的內容,除非您的上一個函數恰好返回函數。

您需要爲window.onload指定一個函數,當window準備就緒時,該函數將調用您的函數。

window.onload = function() { 
    foo(); 
    bar(); 
}; 

此外,由於您將腳本放在底部,因此您可能不需要window.onload

<script> 
     foo(); bar(); 
    </script> 
</body> 

你也應該知道,直接window.onload分配將覆蓋<body onLoad=...>分配腳本,所以你不應該做兩個。目前,返回值bar();正在消除調用display();的函數。

擺脫window.onload分配將解決這個問題。

+1

我想你指出了一個重要的問題,但沒有足夠的重點。該'window.onload'覆蓋'<體的onload =「」>',並分配給'值window.onload'可能'undefined'(調用'bar'的返回值的事實。此外,根據他們真正的意思是,OP表示,劇本是的''底部: – Ian 2013-02-20 16:44:38

+0

@Ian「除了我在文件末尾附加功能」:是的,我想你是對的望着問題再次,新的腳本似乎是在底部,所以這是有可能的罪魁禍首。 – 2013-02-20 16:46:09

+0

但在同一時間覆蓋,因爲'foo'和'bar'被稱爲,**和**的文檔準備好了(因爲腳本在底部),你不覺得代碼會起作用嗎?我的意思是,'onLoad =「display()」'不會因爲它被覆蓋,但我會認爲無論'foo'和'bar'做什麼,這些都可以工作。但顯然,display()不會運行。 OP沒有說清楚「不工作」是什麼意思...... – Ian 2013-02-20 16:52:38

3

在第一種情況下,我沒有看到一個原因,它不應該工作,只要display()定義功能沒有任何錯誤。

在第二種情況下,分配通過DOM事件處理程序時,就需要在一個匿名函數通過其中一個函數引用(即,而不是foo()只是foo)或包裹它像這樣:

window.onload = function() { 
    foo(); 
} 
+0

從技術上講,調用'foo'或'bar'(在OP的代碼中)可能會返回一個函數,因此設置'window.onload'就好了。我懷疑它是,但仍然:) – Ian 2013-02-20 16:42:01

+0

這是正確的另外,在這種情況下,分配函數_call_應該返回一個函數_reference_。 – marekful 2013-02-20 16:49:50

+1

嗯,我的意思是一個函數_reference _...還有什麼可以的? – Ian 2013-02-20 17:06:02