Как исправить «Uncaught TypeError: Невозможно вызвать метод 'appendChild' из null»

Я пытаюсь получить текст из текстовой области HTML и вызвать метод create (), когдаОтправить' кнопка нажата. Метод пытается использовать сообщение из текстовой области и разместить его в своем собственном теге p с помощью класса, а также опубликовать отметку даты в своем собственном теге p и в своем собственном классе.

Они оба будут в div 'Комментарии', Ошибка, которую я получаю (используя инструменты разработчика в Chrome),

Uncaught TypeError: Невозможно вызвать метод 'AppendChild» нуля

Это нацелено наcmt.appendChild (divTag);», Я очень плохо знаком с Javascript, и это просто практика для меня, чтобы повысить свои навыки. Вся помощь очень ценится!

var cmt = document.getElementById('comments');

function create() {

    var username = 'User',
        message = document.getElementById("textBox").value,
        divTag = document.createElement('div'),
        p1 = document.createElement('p'),
        p2 = document.createElement('p');

    divTag.className = 'comment';

    p1.className = 'date';
    p1.innerHTML = new Date();
    divTag.appendChild(p1);

    p2.className = 'message';
    p2.innerHTML = username + ': ' +message;
    divTag.appendChild(p2);

    cmt.appendChild(divTag);
}
 Dimitry18 февр. 2013 г., 23:27
Уверены ли выvar cmt = document.getElementById('comments'); вызывается после элемента IDКомментарии" создано?
 Fizzix18 февр. 2013 г., 23:31
Да, мой Javascript является внешним по отношению к моей HTML-странице.

Ответы на вопрос(3)

если обязательные элементы существуют. Как вы можете видеть вэто скрипка.

Работает, если HTML похож на:

<div id="comments">
    <input id="textBox" type="textBox" value="Hello">
</div>

Я предполагаю, что один из идентификаторов может быть с ошибкой или элемент, как вы ожидаете, не существует.

Однако, если вы запускаете скрипт во внешнем файле, он может попытаться выполнить его до полной загрузки документа, поэтому ваш скрипт ссылается на элементы, нееще готов в DOM.

В jQuery вы бы обернуть$(document).ready(function(){// your code here..}) вокруг.

В этом посте есть некоторые подробности о том, как сделать это на JavaScript:Документ Готовый эквивалент без jQuery.

 Fizzix18 февр. 2013 г., 23:51
Сделаем, определенно придется попробовать и начать добавлять jQuery, чтобы избавить себя от множества проблем. Спасибо!
 Nope18 февр. 2013 г., 23:38
@JadeMulholland: Без jQuery я думаю, что это будет сложнее, как вы можете видеть на связанном примере. Пойти на чтоx3ro предложил относительно тег рядом с тег.
 Fizzix18 февр. 2013 г., 23:35
Это'Это так странно, так как я также проверил, что это Fiddle, и он работал отлично. У меня есть div с идентификаторомКомментарии' в моем HTML-документе. Мой HTML-документ ссылается на мой Javascript-документ в заголовке (очевидно), а мой div с идентификатором 'Комментарии' вызывается в конце моего HTML-документа. Это как-то связано с этим?
Решение Вопроса

что нет элемента с идентификатором "Комментарии" на твоей странице.document.getElementById вернусьnull когда элемент с таким идентификатором не найден, и, таким образом,cmd.appendChild(divTag) будет выполнен как.null.appendChild(divTag)

Если вы уверены, что элемент существует, возможно, вы выполняете свой JavaScript, который назначаетcmt переменнаядо того, как этот элемент создан браузером, Чтобы предотвратить это, стандартная практика заключается в размещении тег, который включает в себя ваш внешний JavaScriptнезадолго до закрытия тег.

Если ты можешь'по какой-то причине переместите тег сценария, попробуйте запустить код, который назначает переменную с$(document).ready() (JQuery)или эквивалент.

 Fizzix18 февр. 2013 г., 23:30
Этот Javascript является внешним по отношению к моей HTML-странице. У меня определенно есть div в моем HTML с идентификатором 'Комментарии', Хотя div полностью пуст и ждет, пока этот текст будет помещен в него.
 Nope18 февр. 2013 г., 23:39
+1, теперь я знаю, что еще может работать, если jQuery не вариант. Ницца.
 the system19 февр. 2013 г., 00:25
Размещение сценария перед следует рассматривать как стандартную практику, а не альтернативу.
 Fizzix18 февр. 2013 г., 23:38
Спасибо друг, добавил мой код ПОСЛЕ того, как мой div был создан, и работал отлично. Спасибо всем за помощь, оказал мне большую помощь! :)
 fresskoma19 февр. 2013 г., 09:03
@thesystem Вы правы. Это было, к сожалению, очень сформулировано, потому что (по какой-то причине) у меня было </ Тело> Идея последняя ... :( Поменял, правда :)

его код в порядке. Просто JavaScript работает ДО HTML. Простое исправление заключается во вложении всего кода в функцию с любым именем. Затем используйте window.onload для запуска функции после загрузки HTML. так в основном:

window.onload = function any_name()
{
//code to be executed
}

Это полезно, особенно если вы не хотите перемещать тег сценария. Я вообще хотел бы оставить метку там, где она есть.

Ваш ответ на вопрос