有人可以帮我解决初学者代码中的错误吗?我正在尝试将列表项添加到列表中并尝试更改我在javascript中添加它的列表的ID。提前致谢。
<html>
<head>
<script>
window.onload = init;
function init() {
var button = document.getElementById("submit");
button.onclick = changeDiv;
}
function changeDiv() {
var counter=1
var name = "ul";
var textInput = document.getElementById("textInput");
var userInput = textInput.value;
alert("adding " + userInput);
var li = document.createElement("li");
li.innerHTML = userInput;
var ul = document.getElementById("ul" + loop());
ul.appendChild(li);
}
function loop() {
return counter;
if (counter==3){
counter==0;
}
counter++;
}
</script>
</head>
<body>
<form id="form">
<input id="textInput" type="text" placeholder="input text here">
<input id="submit" type="button">
</form>
<ul id="ul1">
</ul>
<ul id="ul2">
</ul>
<ul id="ul3">
</ul>
</body>
答案 0 :(得分:2)
我认为你想要的就是其中之一:
counter
的范围设为全球(yuk)counter
那里counter
传递给loop()
。loop()
中定义changeDiv()
。 我认为你想要#2,所以我在你的代码中进行了几次修正来填补它:
我选择#2的原因是:
答案#4类似,因为它会为changeDiv和loop创建一个闭包,从而可以访问他们所需的内容。但是,我并不想过多地更改现有的逻辑块以阻止增量学习。但是人们肯定可以在loop()
中包含changeDiv()
(它不是一个真正的循环而是一个setter)的参数 - 尽管你可能会删除单独的函数调用指出并更多地整合代码。
答案 1 :(得分:0)
基本上,您需要:
counter
(loop()
无法访问它)loop()
中,return语句必须是最后一项。之后的任何事情都不会被执行。我稍微改变了逻辑,最后的代码就是这样:
window.onload = init;
var counter=1;
function init(){
var button = document.getElementById("submit");
button.onclick = changeDiv;
}
function changeDiv(){
var name = "ul";
var textInput = document.getElementById("textInput");
var userInput = textInput.value;
var id = "ul" + loop();
alert("adding " + userInput + " to " + id);
var li = document.createElement("li");
li.innerHTML = userInput;
var ul = document.getElementById(id);
ul.appendChild(li);
}
function loop(){
var tmp = counter++;
if (counter==4){
counter=1;
}
return tmp;
}
请注意loop()
功能中的更改。
我还更改了changeDiv()
功能,以在警报中显示列表ID。