2010-04-26 219 views
0
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<HEAD> 
<script type="text/javascript" src="lb-core.js"></script> 
<script type="application/javascript"> 
var lbp = { 
    defaults: { 
     color: "blue" 
    }, 
    init: function(config) { 
     if(config) { 
      for(prop in config){ 
       setBgcolor.defaults[prop] = config[prop]; 
      } 
     } 
     var bod = document.body; 
     bod.style.backgroundColor = setBgcolor.defaults.color; 
    } 
} 
window.onload = lbp.init(); 
</script> 
</HEAD> 
<body> 
<div id="container">test</div> 
</body> 
</HTML> 

爲什麼bod在window.onload被調用時返回undefined?變量未定義

+0

如果您還發布了更多的Javascript和HTML,這將有所幫助。一種可能性是你的代碼在onload處理程序中不運行,而是在解析頭部中的腳本標記(在看到body標記之前)時運行。 – Pointy 2010-04-26 19:53:06

+0

試着把你的腳本放在body標籤後面。 – Kasturi 2010-04-26 20:00:13

回答

2

您的代碼需要一些teaks,這裏是一個整體的解決辦法:

var lbp = { 
    defaults: { 
     color: "blue" 
    }, 
    init: function(config) { 
     if(config) { 
      for(prop in config){ 
       lbp.defaults[prop] = config[prop]; 
      } 
     } 
     var bod = document.body; 
     bod.style.backgroundColor = lbp.defaults.color; 
    } 
} 
window.onload = lbp.init; 

上有人呼籲init瞬間,因爲window.onload = lbp.init()被分配結果lbp.init到的onload功能,不分配實際功能,這是固定的。

此外,不知道其中setBgcolor來自您的代碼,我相信你的意思是lbp在這裏,它工作在上面的相同的代碼,給它一個測試。

+0

是的,我體會到身體工作後,我意識到那些其他配置調用。謝謝! – Matrym 2010-04-26 20:03:14

+0

尼克 - 如果我不在window.onload = lbp.init中使用parens,我應該如何在配置文件中進行訪問,這將覆蓋默認配置? – Matrym 2010-04-26 20:33:30

+0

@Matrym - 你可以使用一個匿名函數,像這樣:'window.onload = function(){lbp.init({optionsHere}); };' – 2010-04-26 20:50:50

1

試試這個:

var bod = document.body;

我不知道爲什麼bod回來在你的代碼爲未定義..它在Chrome對我的作品。你運行什麼瀏覽器?

另外,你確定它是bod這是undefined?不是setBgcolor還是別的?

編輯

更改這行代碼:

window.onload = lbp.init();

要這樣:

window.onload = lbp.init;

您目前正在分配LPD的結果 。 init()到onload ..你只需要分配引用。

+0

添加了完整的頁面代碼。在Firefox中運行。 – Matrym 2010-04-26 19:56:32

+0

@Martym看我的編輯 – Matt 2010-04-26 19:58:15

+0

感謝馬特 - 對錢。 – Matrym 2010-04-26 20:01:33

3

將其更改爲

window.onload = lbp.init; 

當你寫window.onload = lbp.init(),你是調用init功能,並指派不管它返回到window.onload
因此,函數被立即稱爲(在窗口加載之前),並且您將undefined指定爲window.onload。 (因爲init不返回任何內容)

您需要將init函數本身分配給onload而不調用它。

+0

謝謝,你是正確的slaks :) – Matrym 2010-04-26 20:01:58