2016-11-15 105 views
0

我寫了一個小程序,使用addEventListener()單擊按鈕時彈出警報。 PFB下面的代碼:addEventListener()沒有響應

HTML文件

<html> 
    <head> 
     <title>name alert</title> 
     <script type="text/javascript" src="test.js"></script> 
</head> 
    <body> 
     <input id="p" type="button" value="alert"> 
    </body> 
</html> 

JavaScript文件

document.getElementById("p").addEventListener("click",greet,true); 

function greet(){ 
    alert("hello there !"); 
} 

我沒有得到一個彈出屏幕這樣這兩個文件都在同一個文件夾BTW。

+0

你的代碼的工作:https://jsfiddle.net/c0sLjy2t/。也許JavaScript的來源是錯誤的?! –

+0

在控制檯中是否出現錯誤?腳本標記在html之前? – DoctorMick

+4

檢查控制檯,查看錯誤。該腳本將在構造DOM之前執行並且在其中出現「p」元素,因此'getElementById'調用只返回'null'。 – raina77ow

回答

0

test.js在加載DOM之前加載並執行。所以,在這一點上#p返回null。嘗試收聽onload事件,並添加點擊事件。

document.addEventListener("DOMContentLoaded", function(){ 
 
    
 
document.getElementById("p").addEventListener("click",greet,true); 
 
    
 
}); 
 

 
// global scope 
 
function greet(){ 
 
    alert("hello there !"); 
 
}
<input id="p" type="button" value="alert">

0

嘗試移動你的

<script type="text/javascript" src="test.js"></script> 

只是

之前
</body> 
0

你需要把的addEventListener一個名爲負載事件函數內。在頁面被創建時,它會運行JavaScript。如果它還沒有創建HTML,那麼當addEventListener運行時它不會找到'p'元素,它會給你一個錯誤。

您還可以移動的JavaScript是HTML之後,但它更有組織把它放在這樣的:

<script type="text/javascript"> 
window.addEventListener('load', 'function(){pageload()}', false) 

function pageload() 
{ 
    document.getElementById("p").addEventListener("click",greet,true); 
} 
</script>