2011-12-27 43 views
0

爲什麼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

回答

2

你需要改變這一行:

window.onload = load(); 

要閱讀以下內容:

window.onload = load; 

注意區別,第一個例子會調用load()函數,並將其返回值分配給window.onload,當然這將是undefined

第二個示例會將函數本身分配給window.onload,這正是您想要的,並且會提示[object HTMLSelectElement](在Firefox中)。

+0

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

2

你的代碼改成這樣:

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

相關問題