我已经看了一会儿,但没有找到任何解决方案。我尝试做的是将包含我的选项值的变量存储到一个数组中,该数组中包含变量中每个元素的索引,因此我可以将其称为索引。
这是我的代码:
var selectArray = ['Package 1', 'Package 2'];
var selectField = document.getElementById('testS');
for(i = 0; i < selectArray.length; i++) {
let arrayList = selectArray[i];
let arrayOption = document.createElement('option');
selectField.appendChild(arrayOption);
arrayOption.value = arrayList; // Value Option in Option
arrayOption.innerHTML = arrayList; // Text in Option
let newArray = [];
newArray.push(arrayOption.value);
// This doesn't work I want each element in the variable to be indexed in the array. so I can do for example newArray[0] which will return Package 1 from the value.
}
&#13;
<select name="fromList" id="testS"></select>
&#13;
原因我试图将我的循环变量中的选项值推送到数组中是因为我想选择每个索引并将另一个包含数据的数组附加到它们。
答案 0 :(得分:1)
您只需要更改声明newArray
的位置即可。 let
创建了块级范围,因此如果你在循环中对它进行delcare,那么它的范围只是循环的一次迭代。您不希望在循环的每次迭代时重新声明变量,因为这会消除先前的值。
var selectArray = ['Package 1', 'Package 2'];
var selectField = document.getElementById('testS');
// You need to declare variables in the scope that you will want to use them
let newArray = [];
for(i = 0; i < selectArray.length; i++) {
let arrayList = selectArray[i];
let arrayOption = document.createElement('option');
selectField.appendChild(arrayOption);
arrayOption.value = arrayList; // Value Option in Option
arrayOption.innerHTML = arrayList; // Text in Option
newArray.push(arrayOption.value);
}
console.log(newArray);
&#13;
<select name="fromList" id="testS"></select>
&#13;
现在,接下来的问题是为什么你真的需要这样做呢? option
中的select
元素始终可以作为数组按需获取:
var options = Array.prototype.slice.call(document.querySelectorAll("#testS > option"));