Как динамически обновить HTML «выбрать» поле в IE - PullRequest
1 голос
/ 04 ноября 2008

У меня есть HTML-элемент "select", который я динамически обновляю с помощью кода, похожего на этот:

var selector = document.getElementById('selectorId');    
for (var i = 0; i < data.length; ++i)
{
  var opt = document.createElement('option');
  opt.value = data[i].id;
  opt.text = data[i].name;
  selector.appendChild(opt);
}

Прекрасно работает в Firefox, но IE7 не меняет размер списка в соответствии с новыми данными. Если окно списка изначально пустое (что в моем случае), вы вряд ли увидите какие-либо опции, которые я добавил. Есть лучший способ сделать это? Или способ исправить это для работы в IE?

Ответы [ 5 ]

4 голосов
/ 04 ноября 2008

Установите свойство innerHTML объектов параметров вместо их text.

var selector = document.getElementById('selectorId');    
for (var i = 0; i < data.length; ++i)
{
  var opt       = document.createElement('option');
  opt.value     = data[i].id;
  opt.innerHTML = data[i].name;
  selector.appendChild(opt);
}

Работает на IE6, только что протестировано. Не ломается на FF3, поэтому я думаю, что это оно.

(Я выбрал «innerHTML», потому что это работает во всех браузерах. Чтобы установить буквальный текст, вы должны использовать «innerText» в IE и «textContent» в FF, и вам, вероятно, придется проверить его в другом месте, как хорошо. До тех пор, пока в свойствах «name» нет специальных символов (&, <,>), будет достаточно «innerHTML».)

4 голосов
/ 04 ноября 2008

Вам не нужно манипулировать DOM для этого. Попробуйте вместо этого

var selector = document.getElementById('selectorId');  
for (var i = 0; i < data.length; ++i) {
    selector.options[selector.options.length] = new Option(data[i].name, data[i].id);
}
2 голосов
/ 11 февраля 2012

После добавления элемента option введите select.style.width в auto, даже если он уже равен auto.

Если это не работает, очистите select.style.width до "", а затем снова восстановите select.style.width до auto.

Это позволяет Internet Explorer пересчитать оптимальную ширину select элементов.

0 голосов
/ 04 ноября 2008

Установите ширину поля выбора явным образом, используя, например,. стиль CSS «ширина», вместо того, чтобы позволить браузеру угадывать ширину по его содержимому.

0 голосов
/ 04 ноября 2008

Вы можете попробовать заменить весь элемент select из сгенерированного HTML-кода или взломать, удалив элемент из DOM и прочитав его.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...