Ошибка Javascript Null не является объектом
Я получаю сообщение об ошибке в веб-инспекторе, как показано ниже:
TypeError: 'null' is not an object (evaluating 'myButton.onclick = function() {
var userName = myTextfield.value;
greetUser(userName);
return false;
}')
Вот мой код (HTML):
<h2>Hello World!</h2>
<p id="myParagraph">This is an example website</p>
<script src="js/script.js" type="text/javascript"></script>
<form>
<input type="text" id="myTextfield" placeholder="Type your name" />
<input type="submit" id="myButton" value="Go" />
</form>
Вот JS:
var myButton = document.getElementById("myButton");
var myTextfield = document.getElementById("myTextfield");
function greetUser(userName) {
var greeting = "Hello " + userName + "!";
document.getElementsByTagName ("h2")[0].innerHTML = greeting;
}
myButton.onclick = function() {
var userName = myTextfield.value;
greetUser(userName);
return false;
}
Любая идея, почему я получаю сообщение об ошибке?
Ответы
Ответ 1
Поместите код так, чтобы он выполнялся после определения элементов, либо с помощью обратного вызова DOM, либо помещал источник под элементами HTML.
document.getElementById()
возвращает null
, если элемент не найден. Имущество присваивается только объектам. null
не является объектом (вопреки тому, что говорит typeof
).
Ответ 2
Любой JS-код, который выполняет и обрабатывает элементы DOM, должен выполняться после создания элементов DOM. JS-код интерпретируется сверху вниз, как изложено в HTML.
Итак, если перед элементами DOM есть тег, код JS в теге script будет выполняться, когда браузер анализирует HTML-страницу.
Итак, в вашем случае вы можете поместить свой DOM-взаимодействующий код внутри функции, чтобы была определена только функция, но не выполнена.
Затем вы можете добавить прослушиватель событий для загрузки документа для выполнения функции.
Это даст вам что-то вроде:
<script>
function init() {
var myButton = document.getElementById("myButton");
var myTextfield = document.getElementById("myTextfield");
myButton.onclick = function() {
var userName = myTextfield.value;
greetUser(userName);
}
}
function greetUser(userName) {
var greeting = "Hello " + userName + "!";
document.getElementsByTagName ("h2")[0].innerHTML = greeting;
}
document.addEventListener('readystatechange', function() {
if (document.readyState === "complete") {
init();
}
});
</script>
<h2>Hello World!</h2>
<p id="myParagraph">This is an example website</p>
<form>
<input type="text" id="myTextfield" placeholder="Type your name" />
<input type="button" id="myButton" value="Go" />
</form>
Fiddle at - http://jsfiddle.net/poonia/qQMEg/4/
Ответ 3
Я думаю, что ошибка, потому что элементы undefined, поэтому вам нужно добавить событие window.onload
, которое это событие определит ваши элементы при загрузке окна.
window.addEventListener('load',Loaded,false);
function Loaded(){
var myButton = document.getElementById("myButton");
var myTextfield = document.getElementById("myTextfield");
function greetUser(userName) {
var greeting = "Hello " + userName + "!";
document.getElementsByTagName ("h2")[0].innerHTML = greeting;
}
myButton.onclick = function() {
var userName = myTextfield.value;
greetUser(userName);
return false;
}
}
Ответ 4
Попробуйте загрузить javascript после.
Попробуйте следующее:
<h2>Hello World!</h2>
<p id="myParagraph">This is an example website</p>
<form>
<input type="text" id="myTextfield" placeholder="Type your name" />
<input type="submit" id="myButton" value="Go" />
</form>
<script src="js/script.js" type="text/javascript"></script>
Ответ 5
Я согласен с alex о том, чтобы загрузить DOM. Я также думаю, что кнопка отправки вызовет обновление.
Это то, что я сделал бы
<html>
<head>
<title>webpage</title>
</head>
<script type="text/javascript">
var myButton;
var myTextfield;
function setup() {
myButton = document.getElementById("myButton");
myTextfield = document.getElementById("myTextfield");
myButton.onclick = function() {
var userName = myTextfield.value;
greetUser(userName);
return false;
}
}
function greetUser(userName) {
var greeting = "Hello " + userName + "!";
document.getElementsByTagName("h2")[0].innerHTML = greeting;
}
</script>
<body onload="setup()">
<h2>Hello World!</h2>
<p id="myParagraph">This is an example website</p>
<form>
<input type="text" id="myTextfield" placeholder="Type your name" />
<input type="button" id="myButton" value="Go" />
</form>
</body>
</html>
получайте удовольствие!
Ответ 6
Ваш код работает для меня. Какое сообщение об ошибке вы получаете?