javascript - 如何使用 JavaScript 在 HTML 中生成可点击的数组/列表
问题描述
我正在尝试使用 JavaScript 函数制作一个列表以在 HTML 页面上呈现。我知道我可以使用DOM.createElement("LI")
,但我希望列表中的每个项目都具有不同的属性,以便在单击列表的那一部分时,它会重新迭代该函数。
这是我当前的 HTML(我以 的参数5
为例,我确实有一组可能的数字):
<!DOCTYPE html>
<html>
<body>
<p id="count" onclick="makeAList(5)">Click me too!</p>
<script>
function makeAList(num){
var itemList = [];
for (i = 0; i < num; i ++){
itemList.push(i);
itemList.forEach(document.setAttribute("onclick", makeAList(i)) = i);
}
document.getElementById("count").innerHTML = itemList;
}
</script>
</body>
</html>
单击初始页面时,我无法生成任何内容。我应该如何解决这个问题?我想要它,当我点击它时,Click me too!
它会生成0,1,2,3,4
,然后如果我点击它,比如说3
,它会呈现0,1,2
.
解决方案
这里有几件事需要改变。
首先,在这种情况下,我将使用addEventListener
而不是setAttribute
.
接下来,这一行将document.setAttribute("onclick", makeAList(i))
给您一个Maximum call stack size exceeded.
错误,因为通过这样编写函数makeAList(i)
将在当时和那里调用它,从而不断调用相同的函数。你可以只写document.setAttribute("onclick", makeAList)
。不需要参数,因为在下一部分中,您将能够从 click 事件本身获取参数。
接下来,我将为数组中的每个项目创建一个新元素,这样您就可以根据每个项目确定要进行多少次迭代innerText
。如果不这样做,无论您是否单击 0、1 或 2,目标的 innerText 都将0,1,2
如此,因此您将无法充分确定要执行的正确迭代次数。您将它们分成不同的元素,每个元素都会onclick
添加一个事件。现在,当您单击该元素时,makeAList
您将可以访问该元素event.target.innerText
,使用parseInt
后将给您一个整数,您可以将其用作迭代长度。
document.getElementById("count")
最后,一旦你有了一个基于从事件收集的迭代长度生成的元素数组,你可以通过将它设置为等于来清除目标 () 的 innerHtml ''
。然后你遍历你的元素数组并使用append
将它们附加到你的目标。
您还可以通过将元素的 CSS 设置为display; inline-block;
并使用以下条件确定添加逗号的位置来调整格式。
p.innerHTML = i < ln - 1 ? i + ', ' : i
function makeAList(){
var itemList = [];
var ln = parseInt(event.target.innerText) >=0 ? parseInt(event.target.innerText) + 1 : 3
for (i = 0; i < ln; i ++){
var p = document.createElement('P')
p.innerHTML = i < ln - 1 ? i + ', ' : i
p.addEventListener("onclick", makeAList)
itemList.push(p);
}
document.getElementById("count").innerHTML = ''
itemList.forEach((x)=>{
document.getElementById("count").append(x)
})
}
p {
display: inline-block;
}
<!DOCTYPE html>
<html>
<body>
<p id="count" onclick="makeAList()">Click me too!</p>
</body>
</html>
推荐阅读
- docker - Docker 无法使用 WSL2 中的相对路径进行复制
- azul-zulu - 适用于 Windows 操作系统上 ZULU OpenJRE 7 的 AMD64 或 x86 64 位软件包
- flutter - 这个函数产生的盐有多独特?
- r - posixct 数据类型使用 axis.Date() 时的 X 轴自定义间隔
- sql - Hive : 通过与数据定义记录比较来验证数组中填充数据的质量,并查找填充的数据百分比,数据的质量等级
- reactjs - reactjs上根据动态数据填写表单
- angular - 在角度模块中导入不需要的功能模块是否会增加大小或影响性能
- java - 无法接收来自对讲机、FCM 的推送通知
- python - 带有类列表的 Python 类 - 没有按我预期的那样工作
- linux - 在别名命令 (bash) 中使用 awk 时遇到错误