IE 11似乎对.options []有一个降低的限制 - firefox正常工作 - IE< 11工作得很好

时间:2015-10-01 20:44:28

标签: javascript internet-explorer

    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;
    }​

我的问题似乎在第34行(var loop1 = 0 ....&#34;

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

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

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

IE11的列表中有多少个选项[]是上限还是上限?要么 有没有其他人注意到这种情况发生的错误。

我刚做了一个额外的测试,将每个选项说明的大小限制为5个字符,并加载了全部选项 - 因此它不是数字限制 - 它必须是总长度。< / p>

Rightnow - 对于价值和描述,它大约有4500个条目,大约25个字节,所以大约225k - 我似乎有大约150k总长度的问题。

补充:这个问题似乎也存在于Edge和IE 11上 - 似乎与onfocus和onblue事件触发有关。似乎onfocus正在触发onb​​lur并没有任何意义,因为焦点例程中没有.focus或任何一旦有人点击就会把焦点移开的东西。单击时 - 运行大约需要5-10秒 - 就像运行一个非常长的脚本一样 - 它从焦点和蓝色功能中来回弹跳。很奇怪。我的事件都是内联的,我可能会尝试将其更改为使用JQuery在页面加载后添加事件。

添加了: 好的 - 经过大量的调试 - 我发现问题出在哪里。 在行&#34; list2.options [loop1] =新选项(partc,partc);&#39;&#34;在OnFocus运行的函数内部,导致OnBlur事件触发。 - 似乎只发生在IE11和Edge中。现在我必须弄清楚是否可以在加载数组之前禁用onBlur事件,然后重新启用它。

由于

1 个答案:

答案 0 :(得分:0)

这是评论而不是答案,但是答案部分允许发布代码,因此我使用它代替。

以下适用于所有版本的IE回到IE 5,但在IE9之前,这些选项无法正确显示。您的问题可能是数据源未完全加载。

&#13;
&#13;
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));
}
&#13;
<form>
  <select id="sel0" onchange="console.log(this.value)">
    <option value="first">first</option>
  </select>
  <input type="reset">
</form>
&#13;
&#13;
&#13;