IE 11似乎降低了.options的限制[]- firefox工作正常- IE <11工作正常

IE 11 seems to have a lowered limit on .options[] - firefox works fine - IE <11 works fine

本文关键字:工作 IE firefox options      更新时间:2023-09-26
    function fillarray(arrname) {
       var list1 = document.FORM1.MASTERLIST;
       var list2 = document.getElementById(arrname);
       var rmax = list2.options.length;
       var lmax = list1.options.length;
       var partc = "";
       if (rmax != 0) {var setname = list2.options[list2.selectedIndex].text;}
       for (var loop1 = 0 ; loop1 < lmax ; loop1=loop1+1) {
          partc = list1.options[loop1].text;
          list2.options[loop1]=new Option( partc , partc );
       }
       if ((rmax != 0) && (setname != "")) {
          var si = inlist(list2,setname);
          list2.options[si-1].selected = true;
       }
       return;
    }​

我的问题似乎是在行"for (var loop1 = 0...."

通过测试,我发现2995是我可以使用的最高环路。在上面,我的SELECT选项中没有任何元素。

我预定义了一个选项的主列表-当每个特定的下拉列表被选中时,我将主列表复制到该列表中-所以我不必在加载时为每个列表定义大量的选项。

一切都很好,直到W7升级到IE11 -旧版本的IE工作没有问题。我没有在W7以外的其他操作系统平台上测试过,所以我不知道它是否特定于W7上的IE11

是否有一个上限或上限的总大小限制有多少选项[]可以在IE11的列表?或有没有一个bug,其他人已经注意到这个发生了?

我刚刚做了一个额外的测试,通过限制每个选项描述的大小为5个字符,以及加载的选项的全部数量-所以它不是对数量的限制-它必须是总长度。

现在-大约有4500个条目,每个值和描述大约25字节,所以大约225k -我似乎在总长度约150k时遇到了问题。

补充:这个问题似乎也存在于Edge和IE 11中,似乎与onfocus和onblue事件触发有关。似乎onfocus触发了onblur,这是没有意义的,因为在focus例程中没有。focus,或者任何一旦有人点击就会带走焦点的东西。当你点击时,它需要5-10秒来运行,就像在运行一个很长的脚本,它在焦点和蓝色函数之间来回弹跳。非常奇怪。我的事件都是内联的,我可能会尝试改变这一点,使用JQuery添加事件一旦页面加载。

补充道:好的,经过大量的调试,我找到了问题发生的地方。在"list2。options[loop1]=new Option(partc, partc);'"在OnFocus运行的函数中,导致OnBlur事件触发。似乎只会在IE11和Edge中出现。现在我必须弄清楚我是否可以禁用onBlur事件,直到我加载数组之后,然后重新启用它。

谢谢

这是一个评论不是一个答案,但是答案部分允许张贴代码,所以我使用它代替。

以下内容适用于ie5之前的所有版本,但在IE9之前这些选项不能正确显示。您的问题可能是数据源没有完全加载。

var sel = document.getElementById('sel0');
var base = 'This option has a long value to test things ';
for (var i=0; i<5000; i++) {
  sel.appendChild(new Option(base + i, base + i));
}
<form>
  <select id="sel0" onchange="console.log(this.value)">
    <option value="first">first</option>
  </select>
  <input type="reset">
</form>