Push массива не работает в IE5, используя JavaScript?

Когда я пытаюсь загрузить опции выбора в массив optStored, используя толчок массива, массив всегда остается пустым. В Chrome, Firefox и Safari код работает правильно, но не в Internet Explorer. Есть ли способ обойти это или ничего с этим не поделаешь?

Обновлено 2:12 10.10.16: Внесены некоторые изменения в код, предыдущий код закомментирован, но массив все еще остается пустым! Есть ли решение?

// array to store select options
var optStored = [];

// filter select 
function filterFruits(el) {
  var value = el.value.toLowerCase();
  var form = el.form;
  var opt, sel = form.fruits;
  if (value == "") {
    restoreOpts();
  } else {
    for (var i = sel.options.length - 1; i >= 0; i--) {
      opt = sel.options[i];
      if (opt.text.toLowerCase().indexOf(value) == -1) {
        sel.removeChild(opt);
      }
    }
  }
}

// Restore select options
function restoreOpts() {
  var sel = document.getElementById('fruits');
  sel.options.length = 0;
  for (var i = 0, iLen = optStored.length; i < iLen; i++) {
    // Recent Update 2:12am 10/11/16:
    // Found aworkaround for restoring the select options 
    // This method works with versions of IE4+
    sel.options[sel.options.length] = new Option(optStored[i].text, optStored[i].value, false, false);

    // Recent Comment Update 2:12am 10/11/16: 
    // Console complains of a type mismatch error
    // sel.add(optStored[i], null); 
  }
}

// Load select options
window.onload = function() {
  var sel = document.getElementById('fruits');
  for (var i = 0, iLen = sel.options.length; i < iLen; i++) {
    // Recent Comment Update 2:12am 10/11/16: 
    // tried this method as well but no luck. 
    // it was also mentioned in the comments below
    // the array still remains empty!
    optStored[i] = sel.options[i];

    //optStored.push(sel.options[i]);
  }
};
<form>
  <input type="text" onkeyup="filterFruits(this);" placeholder="Filter">
  <select id="fruits">
    <option value="1">Apple</option>
    <option value="2">Orange</option>
    <option value="3">Cherry</option>
    <option value="4">Banana</option>
  </select>
</form>

2 ответа

Согласно https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/push, IE поддерживает push метод только с версии 5.5. Вместо этого попробуйте следующее:

window.onload = function() {
  var sel = document.getElementById('fruits');
  for (var i = 0, iLen = sel.options.length; i < iLen; i++) {
    optStored[i] = sel.options[i];
  }
};

Если вы нажмете F12, это выдаст какие-либо ошибки в консоли? Консоль IE далеко не так хороша, как инструменты разработчика Chrome / Firefox, но она должна отображать любые ошибки.

Мне интересно про прохождение undefined в качестве второго аргумента add метод, в соответствии с документами следует null добавить новую опцию в конец списка

before является необязательным, и перед этим должен быть вставлен элемент коллекции или индекс типа long, представляющий элемент item. Если этот параметр имеет значение null (или индекс не существует), новый элемент добавляется в конец коллекции.

https://developer.mozilla.org/en-US/docs/Web/API/HTMLSelectElement/add

Другие вопросы по тегам