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