2016-03-18 47 views
2

下面是我的代碼,用於在單擊該按鈕時發出警報的按鈕和功能。它在加載頁面時發出警報,但當我單擊按鈕時不會發出警報。這段代碼有什麼問題?使用HTML中按鈕的相關功能 - 按預期工作

<html> 
<head> 
<script type="text/javascript"> 
b1 = document.getElementById("b0"); 
b1.onclick = message(); 

function message() { 
alert("You clicked a button"); 
} 
</script> 
</head> 
<body> 
<h1>Checking button functionality!</h1> 
<button id="b0">Click me</button> 
</body> 
</html> 

回答

2

你的腳本可能在b1拋出一個未定義的錯誤,因爲DOM是不是在你的ID b0搜索元素時加載。

您需要更新腳本以在load事件中查詢DOM,或者在之後將其移動。在關閉</body>標記之前放置腳本是常見做法。

E.g.

<head> 
<script> 
    function message() { 
    alert("You clicked a button"); 
    }; 

    window.onload = function() { 
    b1 = document.getElementById('b0'); 
    b1.onclick = message; 
    }; 
</script> 
</head> 
... 

另請注意,我省略了onclick作業中的括號。您想要將該功能分配給該事件,而不是調用該功能,然後分配該功能。

0

您需要將腳本下面的按鈕(最好</body>前)和改變

b1.onclick = message(); 

b1.onclick = message; 

否則你不分配的功能,但它的返回值。

甚至更​​好:(見here

b1.addEventListener('click', message); 
+0

謝謝!你在答案中提到了一個很好的參考,但是Quantastical的答案更加精確。投票答覆。 – RashiR

0

您已經執行功能,它的返回值的onclick事件而不是函數引用本身分配。刪除括號: b1.onclick = message;

此外,您必須將腳本塊移動到標記下方,或者當您嘗試向其中添加點擊處理程序時,該按鈕不會存在。

+0

謝謝Connum!由於Quantastical的答案比這更明確,我將其標記爲答案,但我也在爲您的答案投票。 – RashiR