2013-06-13 126 views
4

我創建它使用內置自舉一個HTML頁面的無法設置屬性的「onClick」。這裏是hello.js文件的最終HTML代碼和代碼:遺漏的類型錯誤:空

document.getElementById("subm").onclick=function(){ 
 
    alert("Hello WOrld"); 
 
}
<!DOCTYPE html><html><head><title>Calculator</title><link rel="stylesheet" 
 
     href="/stylesheets/style.css"><meta name="viewport" content="width=device-width, initial- 
 
     
 
     scale=1.0"></head></html><body><link rel="stylesheet" href="/stylesheets/bootstrap.min.css"> 
 
     
 
     <script src="http://code.jquery.com/jquery.js"></script><script 
 
     src="javascripts/bootstrap.min.js"></script><script src="javascripts/hello.js"></script> 
 
    
 
    <h1>Calculator</h1><form class="form-horizontal center1"><div class="control-group"> <label 
 
    
 
    for="num1" class="control-label">Number1</label><div class="controls"><input id="num1" 
 
    
 
    type="number" placeholder="Enter an Integer"></div></div><div class="control-group"> 
 
    
 
    <label for="num2" class="control-label">Number2</label><div class="controls"><input 
 
    
 
    id="num2" type="number" placeholder="Enter an Integer"></div><div class="control-group"> 
 
    
 
    <label for="options" class="control-label">Options</label><div class="controls"><br><select 
 
    
 
    id="options"><option value="+">+</option><option value="-">-</option><option value="*">* 
 
    
 
    </option><option value="/">/</option></select></div></div><div class="control-group"><div 
 
    
 
    class="controls"><br><button id="subm" type="submit" class="btn">Calculate </button></div> 
 
    
 
    </div><div class="control-group"><div class="controls"><input id="cal" type="text" 
 
    
 
    placeholder="Calculator output" disabled="true"></div></div></div></form></body>

當我點擊按鈕使用SUBM然後,而不是警告我收到錯誤

Uncaught TypeError: Cannot set property 'onclick' of null

任何人都可以請告訴我爲什麼我面臨這個錯誤?幫助解決它。

+0

腳本在哪裏? –

回答

15

的問題似乎是您正在執行的腳本加載的元素之前。

我認爲這個劇本是在創建DOM之前附加了hello.js文件添加。

的這裏的解決方案是執行該腳本後DOM就緒像:

window.onload = function(){ 
    document.getElementById("subm").onclick=function(){ 
     alert("Hello WOrld"); 
    } 
} 

所有JavaScript代碼,其與DOM元素等的一個以上涉及具有DOM被加載後,才執行。

演示:Fiddle

+0

另一個可能的解決方法是將''移動到頁面底部 –

+0

好吧我得到了一點我讓我的JavaScript文件document.onload = function() {document.getElementById(「subm」)。onclick = function(){ alert(「Hello WOrld」); } } 但是當我點擊按鈕時,它不顯示警告爲什麼你可以弄明白! –

+0

@RiteshMehandiratta它變成'window.onload' –

2

它可能發生,因爲腳本中的DOM加載之前運行。

嘗試把腳本

window.onload = function() { 
    {your code} 
} 
3

當我看到你正在使用的JQuery的那麼你爲什麼要使用JavaScript使用jQuery的功能。

下面是代碼爲你的願望:

$(document).ready(function(){ 
    $("#subm").click(function(){ 
     alert("Hello World"); 
    }); 
}); 
0

我已經有一個類似的問題......對我來說,與下面的代碼

$(document).on('click','#subm',function() { 
    alert("Hello World"); 
});  
2

的window.onload工作()沒有解決我的問題,所以我不得不編寫代碼來等待元素加載。你可以這樣做:

function waitForLoad(id, callback){ 
    var timer = setInterval(function(){ 
     if(document.getElementById(id)){ 
      clearInterval(timer); 
      callback(); 
     } 
    }, 100); 
} 

waitForLoad("subm", function(){ 
    console.log("load successful, you can proceed!!"); 
    document.getElementById("subm").onclick = function() 
    { 
     alert("I got clicked"); 
    } 
}); 
+0

「的window.onload()並沒有解決我的問題」 - 那你有不同的問題,這個問題是問的人。沒有任何延遲加載OP正試圖訪問的元素。 – Quentin

+0

窗口。onload不適用於所有情況,因爲您有其他框架覆蓋標準窗口。我試圖通過添加另一個答案來幫助導航到此頁面的用戶。考慮我的例子,我使用了一個角度js框架,其中window.onload不起作用,所以如果它有幫助,則不需要downvote答案 – codemania23

+0

此外,代碼戀人的答案與我的答案相同,唯一的區別是他使用jQuery和我的解決方案是在標準的JavaScript。那麼,爲什麼討厭? – codemania23