Ошибка выполнения JavaScript: appendChild() — Неожиданный вызов метода или свойства в IE8

Я получаю ошибку JS во время выполнения, например: «Неожиданный вызов метода или свойства». Вот код:

    var comboInput = document.getElementById("Combo");
    var option1 = document.createElement("option");
    option1.value = "-1";
    option1.innerHTML = "--Select--";
    comboInput.appendChild(option1); //At this line debugger breaks and
                                     // throws the above error

Я рассмотрел некоторые из подобных вопросов на SO по этой проблеме, но до сих пор не получил решения.

Пожалуйста, помогите .. Спасибо за рекламу ...


person Ved    schedule 04.01.2012    source источник
comment
попробуй посмотреть, что есть у comboInput. или вставьте соответствующий код   -  person diEcho    schedule 04.01.2012
comment
Значение comboInput: ObjectHTMLinputElement   -  person Ved    schedule 04.01.2012
comment
Насколько я знаю, входные элементы всегда самозакрывающиеся и не могут иметь потомков. Похоже, вы действительно хотите, чтобы #Combo был элементом select.   -  person sethobrien    schedule 04.01.2012


Ответы (2)


Вы не можете добавлять дочерние элементы к <input> элементам.

Элементы <option> могут быть только дочерними элементами элементов <select>, где элементы <select> представляют собой HTML-версию раскрывающегося списка (или списка с множественным выбором, в зависимости от заданных вами атрибутов).

Попробуйте изменить свой html, чтобы ваш элемент «Combo» выглядел так:

<select id="Combo"></select>

и тогда ваш код должен работать.

Обратите внимание, что вы можете установить параметры непосредственно в HTML-разметке, например,

<select id="Combo">
    <option value="-1">--Select--</option>
    <option value="1">Green</option>
    <option value="2">Purple</option>
</select>

(И поместив параметры в свой html, вы можете добавить дополнительные параметры и/или удалить параметры через JS.)

person nnnnnn    schedule 04.01.2012
comment
Кажется правильным, но он отлично работает в FF/Chrome. Однако спасибо, что поправили... - person Ved; 04.01.2012

Вам нужно проверить значение comboInput (выведите его значение с помощью console.log() или alert(), чтобы увидеть, на что оно установлено).

Скорее всего, он имеет значение null, потому что ваш код не нашел существующий объект с id="Combo". Это может быть потому, что:

  1. Такой объект не существует на вашей странице
  2. Вы не правильно поняли идентификатор
  3. Вы запускаете этот код до загрузки страницы, поэтому объект еще не загружен/не создан.

Если вы включите весь контекст страницы (весь HTML и весь JS или ссылку на действующую страницу), мы можем более подробно рассказать вам, какие шаги следует предпринять для устранения проблемы.

person jfriend00    schedule 04.01.2012
comment
Я проверил на странице. На ней существует комбо. См. приведенный ниже код: <input id="Combo" type="hidden"/> - person Ved; 04.01.2012
comment
Оп сказал об ошибке в IE8, и я думаю, что console.log вызовет ошибку в IE. не так ли? - person diEcho; 04.01.2012
comment
Я не использовал console.log, а сразу предупредил значение элемента - person Ved; 04.01.2012
comment
Отладчик IE8 поддерживает console.log(). Вам просто нужно открыть отладчик, чтобы он поддерживался. - person jfriend00; 04.01.2012
comment
@ adn295 - в каком браузере вы запускаете этот код? Похоже, что вы должны добавлять теги параметров в качестве дочерних элементов тега выбора, а не тега ввода. - person jfriend00; 04.01.2012