变量未定义

问题描述:

<!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

您的代码需要一些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

试试这个:

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

将其更改为

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