gpt4 book ai didi

javascript - 添加新列表项时,我创建的切换功能不起作用

转载 作者:行者123 更新时间:2023-11-30 13:57:01 25 4
gpt4 key购买 nike

我使用 HTML、CSS 和 JavaScript 创建了一个基本 list ,当您单击列表项时,它有一个删除线切换。但是,当我添加新元素时,我无法使用它们的切换开关。

我创建了一个 for 循环来让列表项监听点击,并创建了一个函数,在点击时在元素中添加一行,但如前所述,切换仅适用于已创建的列表项。

var button = document.getElementById("enter");
var input = document.getElementById("userinput");
var ul = document.querySelector("ul");


function inputLength() {
return input.value.length;
}

function createListElement() {
var li = document.createElement("li");
li.appendChild(document.createTextNode(input.value));
ul.appendChild(li);
input.value = "";
}

function addListAfterClick() {
if (inputLength() > 0) {
createListElement();
}
}

function addListAfterKeypress(event) {
if (inputLength() > 0 && event.keyCode === 13) {
createListElement();
}
}
var list = document.getElementsByTagName("li");
for (var i=0; i < list.length; i++) {
list[i].addEventListener("click", addToggle);
}

function addToggle() {
this.classList.toggle("done");
}

button.addEventListener("click", addListAfterClick);

input.addEventListener("keypress", addListAfterKeypress);
.done {
text-decoration: line-through;
}
<!DOCTYPE html>
<html>
<head>
<title>Javascript + DOM</title>
<link rel="stylesheet" type="text/css" href="style.css">
</head>
<body>
<h1>Shopping List</h1>
<p id="first">Get it done today</p>
<input id="userinput" type="text" placeholder="enter items">
<button id="enter">Enter</button>
<ul>
<li class="bold red" random="23">Notebook</li>
<li>Jello</li>
<li>Spinach</li>
<li>Rice</li>
<li>Birthday Cake</li>
<li>Candles</li>
</ul>
<script type="text/javascript" src="script.js"></script>
</body>
</html>

我希望正在创建的列表项也有切换,但只有已经存在的列表项才有。

最佳答案

在您的初始列表项作为 HTML 文档的一部分加载到 DOM 后,切换功能将由您的 Javascript 应用:

var list = document.getElementsByTagName("li");
for (var i=0; i < list.length; i++) {
list[i].addEventListener("click", addToggle);
}

list 中的每一项都应用了事件监听器。但是,list 中的元素仅反射(reflect)在创建 list 时匹配的元素,也就是加载 DOM 时!当您添加新元素时,此代码无法神奇地运行并将事件监听器添加到新元素。

当生成新的 li 时,您必须在某个时候添加相同的事件监听器。有几种方法可以做到这一点;在下面的示例中,在将新列表项添加到 DOM 之前,我在 createListElement() 中包含了对 addEventListener 的另一个调用:

var button = document.getElementById("enter");
var input = document.getElementById("userinput");
var ul = document.querySelector("ul");


function inputLength() {
return input.value.length;
}

function createListElement() {
var li = document.createElement("li");
li.appendChild(document.createTextNode(input.value));
li.addEventListener("click", addToggle);
ul.appendChild(li);
input.value = "";
}

function addListAfterClick() {
if (inputLength() > 0) {
createListElement();
}
}

function addListAfterKeypress(event) {
if (inputLength() > 0 && event.keyCode === 13) {
createListElement();
}
}
var list = document.getElementsByTagName("li");
for (var i=0; i < list.length; i++) {
list[i].addEventListener("click", addToggle);
}

function addToggle() {
this.classList.toggle("done");
}

button.addEventListener("click", addListAfterClick);

input.addEventListener("keypress", addListAfterKeypress);
.done {
text-decoration: line-through;
}
<!DOCTYPE html>
<html>
<head>
<title>Javascript + DOM</title>
<link rel="stylesheet" type="text/css" href="style.css">
</head>
<body>
<h1>Shopping List</h1>
<p id="first">Get it done today</p>
<input id="userinput" type="text" placeholder="enter items">
<button id="enter">Enter</button>
<ul>
<li class="bold red" random="23">Notebook</li>
<li>Jello</li>
<li>Spinach</li>
<li>Rice</li>
<li>Birthday Cake</li>
<li>Candles</li>
</ul>
<script type="text/javascript" src="script.js"></script>
</body>
</html>

关于javascript - 添加新列表项时,我创建的切换功能不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57065242/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com