gpt4 book ai didi

javascript - Vanilla JavaScript : How does option. 删除(索引)工作吗?

转载 作者:行者123 更新时间:2023-11-28 14:28:53 25 4
gpt4 key购买 nike

我正在创建一个包含两个菜单的依赖下拉菜单。

每当第一个菜单中的选项发生更改时,第二个菜单中的内容也必须更改。

我遵循了两个步骤:

第 1 步:从第二个菜单中删除所有选项

第 2 步:根据第一个菜单中所选选项的选项重新填充第二个菜单。

要删除所有选项,我编写了以下代码:

var select = document.getElementById('1st_select');
var selected = select.value;
var target = document.getElementById('2nd_select');
var targetLength = target.length
console.log("Length"+target.length);
for (var i = 0; i <targetLength; i++) {
console.log(i);
target.remove(i);
}

上面的代码没有达到目的。当第一个菜单中的选项更改时,某些选项仍保留在第二个下拉菜单中。

但是如果我只是改变遍历循环

for (var i = 0; i <targetLength; i++)

for (var i = targetLength; i >=0; i--)

效果很好。

为什么会这样?

请尝试仅用 Pure/Vanilla Javascript 解释这个概念。

循环遍历故障的代码片段。

function show_op(id,lb){
var ops = document.getElementsByClassName('option-contents');
var op = document.getElementById(id);
for (var i = 0; i < ops.length; i++) {
ops[i].style.display='none';
}
op.style.display='block';
var labels = document.getElementsByClassName('option-links');
var label = document.getElementById(lb);
for (var i = 0; i < labels.length; i++) {
labels[i].style.backgroundColor="transparent";
}
label.style.backgroundColor="#cccccc";
}

var productsByCategory = {
A: ["CNC 1", "CNC 2", "CNC 3", "CNC 4"],
B: ["LASER 1", "LASER 2", "LASER 3", "LASER 4"],
C: ["RUBBER 1", "RUBBER 2", "RUBBER 3", "RUBBER 4", "RUBBER 5"],
D: ["PRECISION 1","PRECISION 2","PRECISION 3"]
}
var valuesByCategory = {
A: ["A1", "A2", "A3", "A4"],
B: ["B1", "B2", "B3", "B4"],
C: ["C1", "C2", "C3", "C4", "C5"],
D: ["D1","D2","D3"]
}
console.log(productsByCategory);
console.log(productsByCategory['A']);
for (var i in productsByCategory['B']){
console.log(productsByCategory['B'][i]);
}
function dropdown(){
var select = document.getElementById('1st_select');
var selected = select.value;
var target = document.getElementById('2nd_select');
var targetLength = target.length
console.log("Length"+target.length);
for (var i = 0; i <targetLength; i++) {
console.log(i);
target.remove(i);
}
if (selected==0) {
var option = document.createElement("option");
option.text="Select Product first";
option.value="";
target.add(option);
}
if (selected==1) {

for (var i in productsByCategory['A']){
var option = document.createElement("option");
option.text=productsByCategory['A'][i];
option.value=valuesByCategory['A'][i];
target.add(option);
}

}

else if (selected==2){
for (var i in productsByCategory['B']){
var option = document.createElement("option");
option.text=productsByCategory['B'][i];
option.value=valuesByCategory['B'][i];
target.add(option);
}
}
else if (selected==3){
for (var i in productsByCategory['C']){
var option = document.createElement("option");
option.text=productsByCategory['C'][i];
option.value=valuesByCategory['C'][i];
target.add(option);
}
}
else {
for (var i in productsByCategory['D']){
var option = document.createElement("option");
option.text=productsByCategory['D'][i];
option.value=valuesByCategory['D'][i];
target.add(option);
}
}
}
function dropdown2(){
var select = document.getElementById('2nd_select');
var selected = select.value;
console.log(selected);
}
body{
height: 100vh;
margin: 0px;
overflow-y: auto;
font-family: 'Roboto';
}
#clear{
clear: both;
}
.content{
display: flex;
background-color: white;
height: auto;
margin-top: 0px;
font-family: 'Roboto';
z-index: -1;
min-height: 88%;
}

.links{
position: relative;
display: block;
float: left;
width: 30%;
border-style: solid;
box-sizing: border-box;
border-color: black;
line-height: 3;
}
.link-contents{
position: relative;
display: block;
float: left;
left: 0px;
width: 70%;
border-style: solid;
box-sizing: border-box;
border-color: red;

}
.option-links{
display: block;
font-size: 30px;
cursor: pointer;

}
#op1{
background-color: #cccccc;
}

.footer{
display: block;
max-height: 4%;
}


#order_now{
display: block;
}
<!DOCTYPE html>
<html>
<head>
<link href='https://fonts.googleapis.com/css?family=Roboto' rel='stylesheet'>
<link rel="stylesheet" type="text/css" href="profile.css">
<title></title>
</head>
<body>
<div class="content">
<div class="links">
<span class="option-links" id="op1" onclick="show_op('order_now','op1');">Order new</span><br/>
</div>
<div class="link-contents">
<div class="option-contents" id="order_now">
<select id="1st_select" onchange="dropdown();">
<option value="0">Select</option>
<option value="1">CNS</option>
<option value="2">Laser Cut</option>
<option value="3">Rubber roller</option>
<option value="4">Fixture</option>
</select>

<select id="2nd_select" onchange="dropdown2();">
<option>Select Product first</option>
</select>

</div>
</div>

<div id="clear"></div>

</div>

<div class="footer">
A big thank you to all of you.
</div>



</body>
<script type="text/javascript" src="profile.js"></script>
</html>

最佳答案

删除此代码段

for (var i = 0; i < targetLength; i++) {
console.log(i);
target.remove(i);
}

with target.innerHTML=''; 这将清空第二个下拉列表并添加新选项

function show_op(id, lb) {
var ops = document.getElementsByClassName('option-contents');
var op = document.getElementById(id);
for (var i = 0; i < ops.length; i++) {
ops[i].style.display = 'none';
}
op.style.display = 'block';
var labels = document.getElementsByClassName('option-links');
var label = document.getElementById(lb);
for (var i = 0; i < labels.length; i++) {
labels[i].style.backgroundColor = "transparent";
}
label.style.backgroundColor = "#cccccc";
}

var productsByCategory = {
A: ["CNC 1", "CNC 2", "CNC 3", "CNC 4"],
B: ["LASER 1", "LASER 2", "LASER 3", "LASER 4"],
C: ["RUBBER 1", "RUBBER 2", "RUBBER 3", "RUBBER 4", "RUBBER 5"],
D: ["PRECISION 1", "PRECISION 2", "PRECISION 3"]
}
var valuesByCategory = {
A: ["A1", "A2", "A3", "A4"],
B: ["B1", "B2", "B3", "B4"],
C: ["C1", "C2", "C3", "C4", "C5"],
D: ["D1", "D2", "D3"]
}
console.log(productsByCategory);
console.log(productsByCategory['A']);
for (var i in productsByCategory['B']) {
console.log(productsByCategory['B'][i]);
}

function dropdown() {
var select = document.getElementById('1st_select');
var selected = select.value;
var target = document.getElementById('2nd_select');
var targetLength = target.length
console.log("Length" + target.length);
target.innerHTML = ''; //changed here
/*for (var i = 0; i < targetLength; i++) {
console.log(i);
target.remove(i);
}*/
if (selected == 0) {
var option = document.createElement("option");
option.text = "Select Product first";
option.value = "";
target.add(option);
}
if (selected == 1) {

for (var i in productsByCategory['A']) {
var option = document.createElement("option");
option.text = productsByCategory['A'][i];
option.value = valuesByCategory['A'][i];
target.add(option);
}

} else if (selected == 2) {
for (var i in productsByCategory['B']) {
var option = document.createElement("option");
option.text = productsByCategory['B'][i];
option.value = valuesByCategory['B'][i];
target.add(option);
}
} else if (selected == 3) {
for (var i in productsByCategory['C']) {
var option = document.createElement("option");
option.text = productsByCategory['C'][i];
option.value = valuesByCategory['C'][i];
target.add(option);
}
} else {
for (var i in productsByCategory['D']) {
var option = document.createElement("option");
option.text = productsByCategory['D'][i];
option.value = valuesByCategory['D'][i];
target.add(option);
}
}
}

function dropdown2() {
var select = document.getElementById('2nd_select');
var selected = select.value;
console.log(selected);
}
body {
height: 100vh;
margin: 0px;
overflow-y: auto;
font-family: 'Roboto';
}

#clear {
clear: both;
}

.content {
display: flex;
background-color: white;
height: auto;
margin-top: 0px;
font-family: 'Roboto';
z-index: -1;
min-height: 88%;
}

.links {
position: relative;
display: block;
float: left;
width: 30%;
border-style: solid;
box-sizing: border-box;
border-color: black;
line-height: 3;
}

.link-contents {
position: relative;
display: block;
float: left;
left: 0px;
width: 70%;
border-style: solid;
box-sizing: border-box;
border-color: red;
}

.option-links {
display: block;
font-size: 30px;
cursor: pointer;
}

#op1 {
background-color: #cccccc;
}

.footer {
display: block;
max-height: 4%;
}

#order_now {
display: block;
}
<div class="content">
<div class="links">
<span class="option-links" id="op1" onclick="show_op('order_now','op1');">Order new</span><br/>
</div>
<div class="link-contents">
<div class="option-contents" id="order_now">
<select id="1st_select" onchange="dropdown();">
<option value="0">Select</option>
<option value="1">CNS</option>
<option value="2">Laser Cut</option>
<option value="3">Rubber roller</option>
<option value="4">Fixture</option>
</select>

<select id="2nd_select" onchange="dropdown2();">
<option>Select Product first</option>
</select>

</div>
</div>

<div id="clear"></div>

</div>

<div class="footer">
A big thank you to all of you.
</div>

关于javascript - Vanilla JavaScript : How does <Dropdown Select> option. 删除(索引)工作吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52237622/

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