javascript document.getElementById(“device”)不起作用?

问题描述:

为什么alert(p1)显示nulljavascript document.getElementById(“device”)不起作用?

http://pastebin.com/VAKwwEge

<!DOCTYPE html> 
<html> 
<head> 
    <script type="text/javascript" src="js/product.js"></script> 
</head> 
<body> 
    Device:<select id="device" name="device" style="width:250px;"> </select>      Line:<select id="line" name="line" style="width:250px;"> </select> 
</body> 
</html> 
window.onload = load(); 
function load() { 
    var p1 = document.getElementById("device"); 
    var l1 = document.getElementById("line"); 
    alert(p1); 
    alert(l1); 
} 
+0

mine [曾经](http://jsfiddle.net/CruhJ/) – OnesimusUnbound 2011-12-27 07:01:34

+0

你错了。它不显示null:http://jsfiddle.net/5DjuW/ – bjornd 2011-12-27 07:02:37

+1

伙计们,默认的jsfiddle将调用包装到库的onLoad事件中(默认情况下是MooTools)。您应该在左侧面板中选择'no wrap(head)'来重现问题 – 2011-12-27 07:04:16

你需要改变这一行:

window.onload = load(); 

要阅读以下内容:

window.onload = load; 

注意区别,第一个例子会调用load()函数,并将其返回值分配给window.onload,当然这将是undefined

第二个示例会将函数本身分配给window.onload,这正是您想要的,并且会提示[object HTMLSelectElement](在Firefox中)。

+0

THX为您提供帮助! – wenchiching 2011-12-27 07:17:46

你的代码改成这样:

function load() { 
    var p1 = document.getElementById("device"); 
    var l1 = document.getElementById("line"); 
    alert(p1); 
    alert(l1); 
} 
window.onload = load; 

的分配为onload需要一个函数引用,而不是函数(没有括号)执行。

有些简单将利用这样的匿名函数:

window.onload = function() { 
    var p1 = document.getElementById("device"); 
    var l1 = document.getElementById("line"); 
    alert(p1); 
    alert(l1); 
} 
+0

您的第二点,* onload的分配需要在函数*的定义不真实之后,但其余答案都是正确的。 – wsanville 2011-12-27 07:06:11

+0

删除第二点。添加使用匿名功能的示例。 – jfriend00 2011-12-27 07:07:21

+0

最后的编辑使它值得... +1 – vdbuilder 2011-12-27 07:15:24