Вам нужно дождаться загрузки элементов DOM.
Скрипт по умолчанию после тегов html. Решение 1:
<head>
</head>
<body>
<button id="myBtn">ClickMe</button>
<p id="demo"></p>
<!--Put script tag in end of body-->
<script src="script.js"></script>
</body>
Другое решение использует функцию onload. При вызове onload DOM загружается и готов к доступу. Решение 2:
// SCRIPT
window.onload = function() {
function myFunction() {
document.getElementById("demo").innerHTML = "Hello World";
}
document.getElementById("myBtn").addEventListener("click", myFunction);
};
<script src="script.js"></script>
</head>
<body>
<button id="myBtn">ClickMe</button>
<p id="demo"></p>
</body>
Попробуйте:
function myFunction() {
document.getElementById("demo").innerHTML = "Hello World";
}
window.onload = function() {
document.getElementById("myBtn").addEventListener("click", myFunction);
}
<button id="myBtn">ClickMe</button>
<p id="demo"></p>