Проблема в том, что <option>
s вложены в <select>
s, а *<select>
* s имеют свойство selectedIndex
.Таким образом, test.options[test.selectedIndex].value
не будет работать, когда test
является элементом <option>
.Попробуйте использовать getElementById
, чтобы получить один из <select>
с, а затем просто получить доступ к .value
(что менее громоздко, чем проверка selectedIndex
):
var nice = [2, 3, 5];
function maker() {
box.appendChild(document.createElement("br"));
for (i = 0; i < 2; i++) {
box.appendChild(document.createTextNode("test " + (i + 1) + " "));
for (k = 0; k < 2; k++) {
var dropdown = document.createElement("select");
dropdown.id = 'select' + i;
box.appendChild(dropdown);
for (j = 0; j < nice.length; j++) {
var option = document.createElement("option");
option.value = nice[j];
option.text = nice[j];
dropdown.appendChild(option);
}
}
box.appendChild(document.createElement("br"));
}
}
function getter() {
var test = document.getElementById("select0");
console.log(test.value);
// same as:
// console.log(test.options[test.selectedIndex].value);
}
<a href="#" id="make" onclick="maker()">create</a>
<a href="#" id="get" onclick="getter()">collect</a>
<div id="box"><br>
Также обратите внимание, что повторяющиеся идентификаторы в одном документе недопустимый HTML , поэтому, если вы когда-либо позвоните maker
более одного раза, длячтобы ваш HTML был действительным, у вас может быть отдельный счетчик за пределами из maker
, который увеличивается:
const makeCount = 0;
function maker() {
// ...
dropdown.id = 'select' + makeCount + '_' + i;
// ...
makeCount++;
}
(или полностью избегать идентификаторов, если это вообще возможно, числовых идентификаторов)признаки являются запахом кода - используйте классы вместо этого