2013-07-18 18 views
5

ja napisałem increbily prosty detektor zdarzeń, a mimo to pojawia się z błędem: Uncaught TypeError: Cannot call method 'addEventListener' of null co sugeruje, że jest to zrobić z identyfikatorem być może (również współpracuje z documentProsty detektor zdarzeń nie działa - 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> 
?

(Wiem, że będę głupio po tym, ale jestem JS noob)

+0

Umieść sekcję skryptu na dole sekcji ciała tuż nad '', element, do którego się odwołujesz, nie został jeszcze załadowany. –

+0

Bingo! ale myślałem, że scenariusz poszedł w głowę? – user2594377

+0

Najlepszą praktyką jest umieszczanie w dolnej części sekcji body w większości przypadków - chyba, że ​​chcesz, aby działały _przedtem elementy zostały załadowane. –

Odpowiedz

10

w momencie wykonania skryptu s, DOM nie został utworzony. możesz umieścić swój skrypt po tagach body, aby uruchomić go po przeczytaniu html - ale najlepszym sposobem na to jest słuchanie dla 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 działa również. Nie podoba mi się to, ponieważ wygląda na to, że jeden skrypt może nadpisać window.onload, aby być jego własną funkcją init. (nie potwierdziłem, że tak się dzieje lub nie)

+0

Doskonałe dziękuję! – user2594377

+0

nie ma za co! Powodzenia witaj w js – Plato

2

Ponieważ ten skrypt jest wykonywany, gdy ciało nie jest jeszcze załadowane. Użyj zdarzenia onload, a wewnątrz niego wklej swój kod.

Powiązane problemy