通过按钮 click/function 从数组中打印列表?
Printing list from an array through a button click/function?
所以我添加了一个从数组创建无序列表的按钮 (var list_content = ["Apple", "Banana", "Orange", "Mango" , "Papaya"];), 每个数组项显示为列表项 li 元素。我还将列表附加到 div 目标。
var question4 = document.querySelector('#btn4');
question4.addEventListener('click', switch4);
var listContent = ['Apple', 'Banana', 'Orange', 'Mango', 'Papaya'];
function switch4() {
var newElement = document.createElement('Li');
div4.appendChild(newElement);
for (var i = 0; i < listContent.length; i++) {
newElement.textContent += listContent[i];
}
}
然而,当我点击网页上的按钮时,每次点击按钮后都会打印 'AppleBananaOrangeMangoPapaya'。
当我将 for 循环更改为:
newElement.textContent = listContent[i];
那么打印出来的就是'Papaya'.
我需要按钮在每次单击按钮后分别打印 'Apple'、'Banana'、'Orange'、'Mango' 和 'Papaya'(所以 'Apple' 第一次点击,'Banana' 第二次点击,依此类推)但我不知道该怎么做。
当您在每次单击按钮时循环遍历整个 listContent
数组时,就会发生这种情况。您可以通过添加默认值为 0 的 index
变量并仅在该索引处添加 listContent
元素并使用 post-increment ++
来解决它,它将继续添加下一个每次点击的元素如下:
var div4 = document.querySelector('#div4');
var question4 = document.querySelector('#btn4');
var index = 0;
question4.addEventListener('click', switch4);
var listContent = ['Apple', 'Banana', 'Orange', 'Mango', 'Papaya'];
function switch4() {
var newElement = document.createElement('Li');
newElement.textContent = listContent[index++];
div4.appendChild(newElement);
}
#div4 {margin-top:10px;}
li {margin: 0 10px;padding: 5px 0;}
<button id="btn4">Click Me</button>
<div id="div4"></div>
试试下面这个:
var question4 = document.querySelector('#btn4');
question4.addEventListener('click', switch4);
var listContent = ['Apple', 'Banana', 'Orange', 'Mango', 'Papaya'];
i = 0;
function switch4() {
var newElement = document.createElement('Li');
div4.appendChild(newElement);
newElement.textContent = listContent[i];
i++;
if (i >= listContent.length){
i = 0;
}
}
问题
您正在遍历数组并将数组中的所有项目追加到您创建的 li
中。
所以每次单击时,数组中的所有元素都会合并并添加为新的 li
元素
for (var i = 0; i < listContent.length; i++) {
newElement.textContent += listContent[i]; // --> issue
}
解决方案
如果您想在每次点击时添加一个元素,您应该添加一个变量来跟踪您添加到列表中的元素。
let startIndex = 0;
function switch4() {
if(startIndex < listContent.length){
let newElement = document.createElement('Li');
div4.appendChild(newElement);
newElement.textContent = listContent[startIndex];
startIndex++;
}
}
所以我添加了一个从数组创建无序列表的按钮 (var list_content = ["Apple", "Banana", "Orange", "Mango" , "Papaya"];), 每个数组项显示为列表项 li 元素。我还将列表附加到 div 目标。
var question4 = document.querySelector('#btn4');
question4.addEventListener('click', switch4);
var listContent = ['Apple', 'Banana', 'Orange', 'Mango', 'Papaya'];
function switch4() {
var newElement = document.createElement('Li');
div4.appendChild(newElement);
for (var i = 0; i < listContent.length; i++) {
newElement.textContent += listContent[i];
}
}
然而,当我点击网页上的按钮时,每次点击按钮后都会打印 'AppleBananaOrangeMangoPapaya'。
当我将 for 循环更改为:
newElement.textContent = listContent[i];
那么打印出来的就是'Papaya'.
我需要按钮在每次单击按钮后分别打印 'Apple'、'Banana'、'Orange'、'Mango' 和 'Papaya'(所以 'Apple' 第一次点击,'Banana' 第二次点击,依此类推)但我不知道该怎么做。
当您在每次单击按钮时循环遍历整个 listContent
数组时,就会发生这种情况。您可以通过添加默认值为 0 的 index
变量并仅在该索引处添加 listContent
元素并使用 post-increment ++
来解决它,它将继续添加下一个每次点击的元素如下:
var div4 = document.querySelector('#div4');
var question4 = document.querySelector('#btn4');
var index = 0;
question4.addEventListener('click', switch4);
var listContent = ['Apple', 'Banana', 'Orange', 'Mango', 'Papaya'];
function switch4() {
var newElement = document.createElement('Li');
newElement.textContent = listContent[index++];
div4.appendChild(newElement);
}
#div4 {margin-top:10px;}
li {margin: 0 10px;padding: 5px 0;}
<button id="btn4">Click Me</button>
<div id="div4"></div>
试试下面这个:
var question4 = document.querySelector('#btn4');
question4.addEventListener('click', switch4);
var listContent = ['Apple', 'Banana', 'Orange', 'Mango', 'Papaya'];
i = 0;
function switch4() {
var newElement = document.createElement('Li');
div4.appendChild(newElement);
newElement.textContent = listContent[i];
i++;
if (i >= listContent.length){
i = 0;
}
}
问题
您正在遍历数组并将数组中的所有项目追加到您创建的 li
中。
所以每次单击时,数组中的所有元素都会合并并添加为新的 li
元素
for (var i = 0; i < listContent.length; i++) {
newElement.textContent += listContent[i]; // --> issue
}
解决方案
如果您想在每次点击时添加一个元素,您应该添加一个变量来跟踪您添加到列表中的元素。
let startIndex = 0;
function switch4() {
if(startIndex < listContent.length){
let newElement = document.createElement('Li');
div4.appendChild(newElement);
newElement.textContent = listContent[startIndex];
startIndex++;
}
}