Я пытаюсь заполнить поле выбора HTML из массива JavaScript, однако, когда я запускаю свою страницу, моя консоль выводит следующее:
Uncaught TypeError: Cannot read property 'appendChild' of null at hello.html:113
Однако, поскольку он создан с помощью JavaScript innerHTML
, я не могу его выбрать. Есть ли другой способ выбрать это?
var police_api_dates = ["&date=2017-03",];
var info = L.control();
info.onAdd = function (mymap) {
this._div = L.DomUtil.create('div', 'info');
this.update();
return this._div;
};
info.update = function (properties) {
this._div.innerHTML = '<select id="parent"></select><h4>Highlighted Postcode</h4>' + (properties ?
'<b> Postcode: ' + properties.Name
: 'Hover over a state');
};
var parent = document.getElementById("parent");
for ( var pos = 0; pos < police_api_dates.length; pos++)
{
//create an <option> to add the <select>
var child = document.createElement("option");
//assign values to the <option>
child.textContent = police_api_dates[pos]
child.value = pos;
//attach the mew <option> to the <selection>
parent.appendChild(child);
}
info.addTo(mymap);
var parent = document.getElementById("parent");
оценивается только один раз, когда JS выполняет эту строку. Позже, вinfo.update()
, вы заменяете этот элемент новым элементом (даже если он имеет тот же идентификатор, это другой элемент). - person connexo   schedule 21.01.2018var parent = document.getElementById("parent");
и все готово. Это восстанавливает поведение браузера по умолчанию, когда элементы с идентификатором становятся доступными по их идентификатору без необходимости объявлять переменную и использовать document.getElementById. - person connexo   schedule 21.01.2018parent.appendChild(child);
нельзя удалять. - person connexo   schedule 21.01.2018parent.appendChild(child);
в DOM есть элемент сid=parent
. - person connexo   schedule 21.01.2018parent
создается в функции, которая вызывается только после ссылки на нее, но функция также уничтожает все дочерние элементы, добавленные к родителю... список слишком длинный. Я бы (честно!) предложил вам начать с нуля. - person trincot   schedule 21.01.2018parent
и последующего цикла for,<select>
еще не существует. Я бы предложил обернуть эту часть кода в функцию, которая вызывается, как только страница полностью загружается. Вы можете сделать это, например, с помощьюdocument.addEventListener
. - person rolfv1   schedule 21.01.2018