2013-07-18 3 views
5

Я написал increbily простой слушатель событий, и все же он приходит с ошибкой: Uncaught TypeError: Cannot call method 'addEventListener' of null, который наводит на мысль, что это делать с идентификатором, может быть (также работает с documentПростой слушатель событий не работает - JS

<html> 
<head> 
    <script type="text/javascript"> 
     function message() { 
     alert("Hello!"); 
     } 
     var button = document.getElementById('button'); 
     button.addEventListener('click', message, true); 
    </script> 
</head> 
<body> 
    <input type="button" id="button" value="Click me!" /> 
</body> 
</html> 
?

(Я знаю, что после этого я буду чувствовать себя глупо, но я JS noob)

+0

Поместите раздел сценария в нижней части вашего тела прямо над '', элемент, на который вы ссылаетесь, еще не загружен. –

+0

Бинго! но я подумал, что сценарий вошел в голову? – user2594377

+0

Лучше всего поместить нижнюю часть тела в большинстве случаев - если вы не хотите, чтобы они запускали _before_, элементы загружались. –

ответ

10

в то время, когда выполняется ваш скрипт es, DOM не был создан. вы можете поместить свой скрипт после тегов тела, чтобы запустить его после чтения html, но лучший способ сделать это - прослушать DOMContentLoaded.

document.addEventListener('DOMContentLoaded', init, false); 
function init(){ 
    function message() { 
    alert("Hello!"); 
    } 
    var button = document.getElementById('button'); 
    button.addEventListener('click', message, true); 
}; 

window.onload = init также работает. Мне это не нравится, потому что мне кажется, что один скрипт может перезаписать window.onload как свою собственную функцию init. (я не подтвердил, что это произойдет или нет)

+0

Отличная благодарность! – user2594377

+0

Добро пожаловать! Добро пожаловать в js – Plato

2

Поскольку этот скрипт выполняется, когда тело еще не загружено. Используйте событие onload и внутри него вставьте свой код.

Смежные вопросы