gpt4 book ai didi

javascript - select 的新选项(循环功能)

转载 作者:行者123 更新时间:2023-11-28 17:23:44 26 4
gpt4 key购买 nike

我正在制作一个简单的函数,通过使用循环添加新选项(数字从 0 到 12)。

但是在列表中我只能看到最后一条记录(12)。我正在检查控制台,在那里我可以看到所有数字。

您知道这段代码中可能存在什么问题吗?

function loop (j) {
var j = 0;
while (j<=12) {
console.log(j);
hours.innerHTML = "<option>" + j + "</option>";
j++;
};
};

loop();
#alarm {
height: 200px;
width: 280px;
background-color: #dddddd;
text-align: center;
}
<head></head>
<body>
<div id="alarm">
<p>Choose time of alarm ring</p>
<select id="hours">
</select>
<select id="min">
</select>
</div>
</body>

最佳答案

您不是添加新选项,而是用新选项替换之前的选项,因为您将使用 = 用新的 HTML 清除旧的 .innerHTML

如果您使用 += 而不是 =,您将向现有选项添加新选项。

function loop (j) {
var j = 0;
while (j<=12) {
//console.log(j);
hours.innerHTML += "<option>" + j + "</option>";
j++;
};
};

loop();
#alarm {
height: 200px;
width: 280px;
background-color: #dddddd;
text-align: center;
}
<head></head>
<body>
<div id="alarm">
<p>Choose time of alarm ring</p>
<select id="hours">
</select>
<select id="min">
</select>
</div>

</body>

话虽如此,使用 .innerHTML 有几个缺点,因为它会导致 HTML 解析器必须重新解析文档,这是浪费并导致性能下降。循环使用就更浪费了。使用 .innerHTML 时也可能存在安全问题,并且事件绑定(bind)可能会随之取消。

相反,建议使用 DOM API 并在内存中创建新的 DOM 元素,然后在循环完成时将它们作为单个单元附加,仅一次。

function loop () {
// Create a container element in memory only
var frag = document.createDocumentFragment();

// While loops can lead to bugs, use for loops instead when possible
for(i = 1; i < 13; i++) {
var op = document.createElement("option"); // Create a new DOM element in memory only
op.textContent = i; // Configure the element
frag.appendChild(op); // Append it to the documentFragment
};

// Now that the loop is done and all the elements have been made,
// append the elements to the DOM in one batch action
document.getElementById("hours").appendChild(frag);
};

loop();
#alarm {
height: 200px;
width: 280px;
background-color: #dddddd;
text-align: center;
}
  <div id="alarm">
<p>Choose time of alarm ring</p>
<select id="hours">
</select>
<select id="min">
</select>
</div>

关于javascript - select 的新选项(循环功能),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52020864/

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