Uncaught TypeError: Не удалось выполнить 'appendChild' на 'Node': параметр 1 не относится к типу 'Node'. на HTMLButtonElement.comm

1

Я новичок в JavaScript, и я хотел бы взять два ввода и напечатать текст в текстовом тексте на нижнем экране, как и для приложения JavaScript, но я получаю указанную ошибку. (См. Изображение)

JS-код

var array=[];

function naam() 
{

var list = document.createElement("ul");        
var inputname=document.getElementById("nameplace").value;     
   list.innerText=inputname;    
    array.push(list);    
    if (inputname ==""|| inputname == " "){    
        alert("kuch tu likho");
    }    
    else {    
        var naam1= document.getElementById("naamprint");    
        naam1.appendChild(list);    
    }
}


var array1=[];

function comm() {    
    var list1=document.createElement("ul");    
    var inputname1=document.getElementById("commentplace").value;    
    list1.innerText=inputname1;    
    array1.push(list1);    
    if (inputname1 =="" || inputname1 ==" "){
        alert("kuch to likho");
    }
    else {

        var naam2=document.getElementById("commentprint");    
        naam2.appendChild(comm);
    }
}

var action=document.getElementById("btn");    
action.onclick=naam;    
action.onclick=comm;

HTML

<p>Name <input type="text" id="nameplace"></p>
<p>Comment <input type="text" id="commentplace" ></p>
<button id="btn"> submit </button>
<p><b id="naamprint"></p></b>
<p><b id="commentprint"></p></b>
<script src="app.js"> </script>
  • 0
    comm в функции comm относится к самой функции, она не является элементом. Вам нужно добавить list1 вместо comm . Кроме того, элемент ul не может иметь текстовый узел в качестве прямого содержимого, поэтому настройка list1.innerText=inputname1; не делает то, что вы думаете, что делает.
  • 0
    Хм ... по крайней мере, FF помещает текстовый узел непосредственно в элемент ul , но это недопустимый HTML ... См. <ul> .
Показать ещё 7 комментариев
Теги:

1 ответ

1
Лучший ответ

Быстрый ответ

naam2.appendChild(comm); // error because comm is not an element that you can append

Изменить на

naam2.appendChild(list1);

Кроме того, вы определяете одного слушателя и переопределяете его

action.onclick=naam;    // this will never execute
action.onclick=comm;

Изменить на

action.addEventListener('click', naam);
action.addEventListener('click', comm);

Еще немного комментариев:

а. сначала закрыть внутренний тег

<p><b id="naamprint"></p></b> // change to </b></p>
<p><b id="commentprint"></p></b> // same situation

б. Вы можете просто использовать nameplace.value вместо document.getElementById("nameplace").value оно работает для любого элемента с идентификатором. например, это

var naam2=document.getElementById("commentprint");    
naam2.appendChild(comm);

могут быть упрощены до этого

commentprint.appendChild(comm);

с. ul тег.

var list1=document.createElement("ul"); ul должен содержать тег li, а не текст.

д. пространства в стоимости. этот:

if (inputname1 =="" || inputname1 ==" "){ ...

лучше изменить

if (!inputname1.trim()){ ...
  • 0
    Большое спасибо @qiAlex
  • 0
    Добро пожаловать, Саад. Да, Уль не для текста, Теему. Если честно, почти каждая строка в этом примере не идеальна, я просто предлагаю минимум, чтобы код работал
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню