Uncaught Typeerror: не может прочитать свойство 'innerHTML' из null - PullRequest
7 голосов
/ 25 января 2012

Может кто-нибудь объяснить, что это за ошибки?

Uncaught TypeError: невозможно прочитать свойство 'innerHTML' со значением null

Просмотреть на моем сайте Это строка, которая вызывает ошибку:

var idPost=document.getElementById("status").innerHTML;

Спасибо

Ответы [ 7 ]

22 голосов
/ 26 сентября 2012
var idPost=document.getElementById("status").innerHTML;

Элемент 'status' не существует на вашей веб-странице.

Таким образом document.getElementById ("status") возвращает ноль. Пока нельзя использовать свойство innerHTML NULL.

Вы должны добавить условие, подобное этому:

if(document.getElementById("status") != null){
    var idPost=document.getElementById("status").innerHTML;
}

Надеюсь, этот ответ поможет вам. :)

20 голосов
/ 10 декабря 2012

Обновление:

Вопрос не задает вопрос. Итак, давайте сделаем это без jquery:

document.addEventListener("DOMContentLoaded", function(event) { 
    //Do work
});

Обратите внимание, что этот метод не будет работать в IE8.

Старый ответ:

Вы вызываете этот скрипт до того, как DOM будет готов. Если вы напишите этот код в метод $ (function () jquery, он будет работать.

4 голосов
/ 12 января 2015

У меня была похожая проблема, но у меня был существующий идентификатор, и, как сказал egiray, я вызывал DOM перед его загрузкой, и консоль Javascript показала ту же ошибку, поэтому я попытался:

window.onload = (function(){myfuncname()});

и этоначать работать

4 голосов
/ 08 февраля 2013

запустить код после вашей html-структуры в инструкции body

    <html>
    <body>
    <p>asdasd</p>
    <p>asdasd</p>
    <p>asdasd</p>
    <script src="myfile.js"></script>
    </body>
    </html>
4 голосов
/ 25 января 2012

Хотя в идеале вы должны выделить код, вызывающий ошибку, и указать его в своем вопросе, ошибка заключается в том, что вы пытаетесь получить внутренний HTML-код элемента status:

var idPost=document.getElementById("status").innerHTML;

Однако элемент «status» не существует в вашем HTML - либо добавьте необходимый элемент, либо измените идентификатор, который вы пытаетесь найти, чтобы он указывал на действительный элемент.

3 голосов
/ 28 декабря 2014

Если скрипт находится в заголовке вашего HTML-документа, тело вашего HTML-документа еще не было создано браузером, независимо от того, что будет в итоге (такой же результат происходит, если ваш скрипт находится в файле HTML но над элементом). Когда ваша переменная пытается найти document.getElementById ("status"), она еще не существует и поэтому возвращает значение null. Когда вы позже используете переменную в своем коде, используется начальное значение (null), а не текущее, потому что переменная ничего не обновила.

Я не хотел перемещать ссылку на скрипт из заголовка HTML, поэтому вместо этого я сделал это в своем файле JS:

var idPost //define a global variable
function updateVariables(){
    idPost = document.getElementById("status").innerHTML; //update the global variable
}

И это в HTML-файле:

<body onload="updateVariables()">

Если у вас уже есть функция onload, вы можете просто добавить в нее дополнительную строку или вызвать функцию.

Если вы не хотите, чтобы переменная была глобальной, определите ее локально в функции, которую вы пытаетесь запустить, и убедитесь, что функция не вызывается до полной загрузки страницы.

0 голосов
/ 19 ноября 2013
//Run with this HTML structure
<!DOCTYPE html>
<head>
    <title>OOJS</title>

</head>
<body>
    <div id="status">
    </div>
    <script type="text/javascript" src="scriptfile.js"></script>
</body>
</html>
...