Javascript getElementById не определено - PullRequest
0 голосов
/ 08 ноября 2018

Я хочу нажать кнопку добавления, чтобы вставить новый элемент <p> в <div id="output">. Когда я нажимаю кнопку удаления, он должен удалить элемент <p>, который я просто добавляю в вывод div. Моя проблема в том, что var outputArea = document.getElementById("output"); иногда не определено.

Например, когда я нажимаю кнопку удаления, он может не иметь никакого ответа, но второй раз, когда я нажимаю кнопку, он будет работать.

window.onload = function () {
    document.getElementById("add").onclick = addParagraph;
    document.getElementById("delete").onclick = deleteLastParagraph;    
}

function deleteLastParagraph() {
    var outputArea = document.getElementById("output");
    var numberOfParas = document.getElementById("output").childElementCount;
    if (outputArea.childNodes[0] == null) {
        alert("No paragraph delete!");
    }
    // outputArea.removeChild(outputArea.childNodes[0]);
    outputArea.removeChild(outputArea.childNodes[numberOfParas - 1]);
}


function addParagraph() {
    var textToAdd = document.getElementById("input").value;
    var outputArea = document.getElementById("output");
    var paragraph = document.createElement("p");
    paragraph.innerHTML = textToAdd;
    outputArea.appendChild(paragraph);
}
<!doctype html>
<html lang="en">
<head>
    <meta charset="utf-8">
    <script src="task4.js" type="text/javascript"></script>
    <style>
        #output {
            border: blue 5px solid;
            padding: 10px;
            margin-bottom: 10px;
            margin-top: 10px;
            width: 50%;
        }

        #output p {
            padding: 10px;
            border: black 1px dashed;
        }
    </style>
</head>
<body>
<h2> Creating, Appending and Deleting Nodes in the DOM Tree </h2>
<p> Type in text below, click add to add as paragraph.
    <button id="add"> ADD</button>
</p>
<textarea id="input" rows="10" cols="60">
</textarea><br>
<button id="delete">Delete Last Paragraph</button>
<br><br>
<h2> Added Paragraphs </h2>
<div id="output">
</div>
</body>
</html>

Ответы [ 3 ]

0 голосов
/ 08 ноября 2018

Вот мое лекарство от этой проблемы:

function deleteLastParagraph() {
    var outputArea = document.getElementById("output");
    var lastChild = outputArea.lastChild
    if(lastChild) outputArea.removeChild(lastChild);
    else alert('No child nodes to remove')
}

Проблема заключалась в том, что свойство childNodes иногда выше, чем childCount, и, следовательно, проблема с отсутствием ответа после нажатия кнопки.

0 голосов
/ 09 ноября 2018

Мой ответ в этом посте. Я думаю, что это поможет вам ( Добавление узлов DOM, удаление, оповещения ) ... есть код с тем же целевым вопросом, и он отлично работает.

0 голосов
/ 08 ноября 2018

Я не видел каких-либо серьезных проблем при запуске кода, как при базовом вводе текста.Это заставляет меня думать, что ваша проблема может быть связана с использованием innerHTML для установки содержимого ваших p-тегов.innerHTML позволяет любому html в вашем вводе отображаться как html, а не как текст, это может быть странным образом нарушать документ.Попробуйте использовать Node.textContent для установки текста вместо этого.

Вам также необходимо вернуться после своего предупреждения, чтобы избежать появления ошибки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...