首页 > 解决方案 > 试图将 span 附加到列表 appendchild(span) 中它会引发错误?

问题描述

我比较大。我试图将 span 附加到我动态创建的列表项中。但它不起作用。此代码在函数内有效,但在函数外无效... Listcheck[i].appendChild(span); 它没有正确附加

var listcheck = document.getElementsByTagName("LI");
var span = document.createElement("SPAN");
for (var i = 0; i <= listcheck.length; i++) {
  var span = document.createElement("SPAN");
  var txt = document.createTextNode("\u00D7");
  span.className = "close";
  span.appendChild(txt);
  span.textContent = "X";
  span.className += "closeicon";
  listcheck[i].appendChild(span);
}

function searchinput() {
  var li = document.createElement("li");
  var inputtext = document.getElementById("client_course").value;
  var t = document.createTextNode(inputtext);
  document.getElementById("myUL").appendChild(li);
  li.appendChild(t);
}
 <html>
<head>
<link rel="stylesheet" href="css/mainstyle.css">
<script src="JS/todo_JS.js"></script>
</head>
<header>
<div class="main">
<div class="checkportion">
<div class="chk_b">
<ul id="myUL">
</ul>

<input type="checkbox" class="check_class" id="check1">
<label for="check1">Javascript</label>
</div>
</div>
<div class="search_portion">
<Input type="text" id="client_course">
<input type="Submit" Value="add" onclick="searchinput()">
</div>

</div>
</header>

</html>

标签: javascript

解决方案


  1. 加载脚本时,您的第一个代码块不得执行,因为当时没有人在正文中。仅当用户单击按钮时才添加 Lis。

  2. 你的client_source在哪里?

     var inputtext = document.getElementById("client_course").value;
    

3.你的MyUL在哪里?

document.getElementById("myUL").appendChild(li);

4.您的函数 searchinput 创建 li 但不会将其附加到文档中。因此在这里:

listcheck[i].appendChild(span);

你有一个错误。listcheck[i] 未定义,因为没有附加 li。

UPD

它会引发错误,因为此脚本执行一次,它不是在某些操作后执行的函数。

  1. 页面已加载
  2. 脚本执行(但函数不执行,因为它仅在单击按钮后执行) 3. 您的第一个块没有看到任何 LI,因此它是未定义的解决方案:
    • 创建事件并将其分派到您的元素(developer.mozilla.org/ru/docs/Web/API/EventTarget/dispatchEvent)
    • 使用 MutationObserver

推荐阅读