使用JavaScript在IE5中Array push不起作用?

4
当我试图使用数组推送将选择选项加载到optStored数组中时,该数组始终为空。在Chrome、Firefox和Safari中,代码正常工作,但在Internet Explorer中不起作用。有没有解决方法或者无法解决?

更新于10/11/16 2:12am: 对代码进行了一些更改,以前的代码已被注释掉,但数组仍然为空!是否有解决方案?

// 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>


你所说的“IE旧版本”指的是哪些版本?也许那些版本上的Select元素没有add方法?或者它有这个方法,但是参数不同(例如,使用字符串而不是<option>标签)? - Greg Burghardt
1
IE5的旧版本 - ur345
4
等一下,你对复古计算机有兴趣吗?IE5,哈哈。 - Bergi
哎呀,IE5已经是Windows 98时代的产物了。它的市场份额在2006年底就已经低于1%了,现在几乎没有人再使用它,除了一些怀旧者。我很感兴趣——你为什么需要它? - John Weisz
这是为学校做的。如果很容易的话,我会使用jQuery、Angular等工具完成它,但不幸的是这些都是要求:/ - ur345
1
我希望我能和你的老师谈一谈,但是...嗯。Bergi提出了一个好方法,基本上你可以使用length属性来轻松地实现一个push。这里还有一个:http://stackoverflow.com/q/31533963/2788872 - John Weisz
2个回答

3

1
如果按F12键,控制台是否会出现任何错误?IE控制台远不如Chrome/Firefox开发者工具好用,但它应该可以显示任何错误。
我想知道将undefined作为第二个参数传递给add方法的情况,根据文档,应该使用null将新选项附加到列表末尾。
引用: before是可选的,是集合的一个元素或表示应在其之前插入项目的类型为long的索引。如果此参数为null(或索引不存在),则新元素将附加到集合的末尾。

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


等等,IE5 有开发者控制台? - John Weisz
1
问题已经更改,最初只是说“旧版本的IE”,没有指定特定版本。称其为“开发人员控制台”有点牵强,但它几乎肯定有一种方法至少可以查看错误。还有一些针对IE的插件,提供某种开发体验,例如Debug Bar [发抖]。 - danwellman

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接