使用 javascript 数组创建的下拉列表选项在 IE 中不可见

Options of dropdown created using javascript array is not visible in IE

本文关键字:IE 选项 数组 javascript 创建 下拉列表 使用      更新时间:2023-09-26
首次

加载页面时,下拉选项不可见。

详细内容——

它是如何工作的--->我已经创建了多个下拉列表。在第一个下拉列表的选项更改上,下拉列表的其余部分将删除所选选项。并在第二个下拉列表的选项更改时,下拉列表的其余部分再次删除选定的选项。相同的过程再次进行,直到最后一个下拉列表。

问题-->这在谷歌crome中工作正常,但在IE中加载页面时,任何下拉列表中都没有可见的选项。一旦选择了某个选项,则只有在该选项的其余部分可见之后。这就是问题所在。我也想要加载下拉列表中的选项应该是可见的,但不知何故在 IE 中它不起作用

提前致谢:)

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head></head>
<script>

function addlist1(element1, selected_element) {
    var select1 = document.getElementById(element1);
    var newOpt = ["ONE", "TWO", "THREE", "FOUR", "FIVE"]; 
    var newopt1 ;
    var newopt2 ;
    if(selected_element == 'mySelect' || selected_element == 'mySelect1' || selected_element == 'mySelect2'
        || selected_element == 'mySelect3'|| selected_element == 'mySelect4' || selected_element == 'mySelect5'){
        var sel = document.getElementById('mySelect');
          newopt1 = newOpt.slice(0, sel.selectedIndex);
          newopt2 = newOpt.slice(sel.selectedIndex + 1, newOpt.length);
          newOpt = newopt1.concat(newopt2);
     if(selected_element == 'mySelect1' || selected_element == 'mySelect2'|| selected_element == 'mySelect3'
             || selected_element == 'mySelect4' || selected_element == 'mySelect5'){
        var sel = document.getElementById('mySelect1');
          newopt1 = newOpt.slice(0, sel.selectedIndex);
          newopt2 = newOpt.slice(sel.selectedIndex + 1, newOpt.length);
          newOpt = newopt1.concat(newopt2);
       if(selected_element == 'mySelect2'|| selected_element == 'mySelect3'
             || selected_element == 'mySelect4' || selected_element == 'mySelect5'){   
        var sel = document.getElementById('mySelect2');
          newopt1 = newOpt.slice(0, sel.selectedIndex);
          newopt2 = newOpt.slice(sel.selectedIndex + 1, newOpt.length);
          newOpt = newopt1.concat(newopt2);
         if(selected_element == 'mySelect3'|| selected_element == 'mySelect4' 
                 || selected_element == 'mySelect5'){
        var sel = document.getElementById('mySelect3');
          newopt1 = newOpt.slice(0, sel.selectedIndex);
          newopt2 = newOpt.slice(sel.selectedIndex + 1, newOpt.length);
          newOpt = newopt1.concat(newopt2);
          if( selected_element == 'mySelect4'  || selected_element == 'mySelect5'){
           var sel = document.getElementById('mySelect4');
          newopt1 = newOpt.slice(0, sel.selectedIndex);
          newopt2 = newOpt.slice(sel.selectedIndex + 1, newOpt.length);
          newOpt = newopt1.concat(newopt2);
              if(selected_element == 'mySelect5'){
                var sel = document.getElementById('mySelect5');
          newopt1 = newOpt.slice(0, sel.selectedIndex);
          newopt2 = newOpt.slice(sel.selectedIndex + 1, newOpt.length);
          newOpt = newopt1.concat(newopt2);
            } 
          }
          }
       }
      }
    }

     for(var i = 0; i < newOpt.length; i++) {
         var opt = newOpt[i];
         select1.options[i].value  = opt.valueOf();
         select1.options[i].text = opt.valueOf();
         } 
}

 function createList() {
     alert('onload');
     var select = document.getElementById("mySelect"); 
        var select1 = document.getElementById("mySelect1");
var select2 = document.getElementById("mySelect2");
var select3 = document.getElementById("mySelect3");
var select4 = document.getElementById("mySelect4");
var select5 = document.getElementById("mySelect5");

     var options = ["ONE", "TWO", "THREE", "FOUR", "FIVE"]; 
     for(var i = 0; i < options.length; i++) {
         var opt = options[i];
            var el = document.createElement("option");
            el.textContent = opt;
            el.value = opt;
            select.appendChild(el);
     }
 for(var i = 0; i < options.length; i++) {
         var opt = options[i];
            var el = document.createElement("option");
            el.textContent = opt;
            el.value = opt;
           select1.appendChild(el);
     }
 for(var i = 0; i < options.length; i++) {
         var opt = options[i];
            var el = document.createElement("option");
            el.textContent = opt;
            el.value = opt;
select2.appendChild(el);
     }
 for(var i = 0; i < options.length; i++) {
     var opt = options[i];
        var el = document.createElement("option");
        el.textContent = opt;
        el.value = opt;
select3.appendChild(el);
 }
 for(var i = 0; i < options.length; i++) {
     var opt = options[i];
        var el = document.createElement("option");
        el.textContent = opt;
        el.value = opt;
select4.appendChild(el);
 }
 for(var i = 0; i < options.length; i++) {
     var opt = options[i];
        var el = document.createElement("option");
        el.textContent = opt;
        el.value = opt;
select5.appendChild(el);
 }
 }
 function removelist(element_id) {
        alert('remove');
        var selected_element = element_id.id;
        alert(selected_element);
        var e0 = document.getElementById("mySelect");
        var e1 = document.getElementById("mySelect1");
        var e2 = document.getElementById("mySelect2");
        var e3 = document.getElementById("mySelect3");
        var e4 = document.getElementById("mySelect4");
        var e5 = document.getElementById("mySelect5");
    if(selected_element == 'mySelect'){
        addlist1("mySelect1", selected_element);
        addlist1("mySelect2", selected_element);
        addlist1("mySelect3", selected_element);
        addlist1("mySelect4", selected_element);
        addlist1("mySelect5", selected_element);
        e1.remove(4);
        e2.remove(4);
        e3.remove(4);
        e4.remove(4);
        e5.remove(4);   
        } else if(selected_element == 'mySelect1'){
            addlist1("mySelect2", selected_element);
            addlist1("mySelect3", selected_element);
            addlist1("mySelect4", selected_element);
            addlist1("mySelect5", selected_element);
            e2.remove(4);
            e2.remove(3);
            e3.remove(4);
            e3.remove(3);
            e4.remove(4);
            e4.remove(3);
            e5.remove(4);
            e5.remove(3);
            }  else if(selected_element == 'mySelect2'){
                addlist1("mySelect3", selected_element);
                addlist1("mySelect4", selected_element);
                addlist1("mySelect5", selected_element);
                e3.remove(4);
                e3.remove(3);
                e3.remove(2);
                e4.remove(4);
                e4.remove(3);
                e4.remove(2);
                e5.remove(4);
                e5.remove(3);
                e5.remove(2);
                }  else if(selected_element == 'mySelect3'){
                    addlist1("mySelect4", selected_element);
                    addlist1("mySelect5", selected_element);
                    e4.remove(4);
                    e4.remove(3);
                    e4.remove(2);
                    e4.remove(1);
                    e5.remove(4);
                    e5.remove(3);
                    e5.remove(2);
                    e5.remove(1);

                    }  else if(selected_element == 'mySelect4'){
                        addlist1("mySelect5", selected_element);
                        e5.remove(5);
                        e5.remove(4);
                        e5.remove(3);
                        e5.remove(2);
                        e5.remove(1);
                        }
           }

 </script>
<body onload ="createList()">
<form id="mainForm" action= "" method ="get">
Criteria One:
<select id="mySelect" onchange="removelist(this)">
</select>
<select id="mySelect1" onchange="removelist(this)">
</select>
<select id="mySelect2" onchange="removelist(this)">
</select>
<select id="mySelect3" onchange="removelist(this)">
</select>
<select id="mySelect4" onchange="removelist(this)">
</select>
<select id="mySelect5">
</select>
         </form>
</body>
</html>

我首先尝试通过不使用 ID 而是使用节点本身来使您的代码更易于维护。这样,您就不必为每个选择重复代码块。但是,我确实为它们分配了ID以供以后处理。我不知道它做了什么,但它在 IE 中对我有用,如果你从左到右选择:

var selects = [],
    numOfSelects = 6,
    options = ["ONE", "TWO", "THREE", "FOUR", "FIVE"];
window.addEventListener('DOMContentLoaded', createList, false);
function createList() {
    var form = document.getElementById("mainForm");
    for(var i = 0; i < numOfSelects; i++){
        var select = document.createElement('select');
        select.id = "mySelect" + i;
        selects.push(select);
        selects[i].addEventListener('change', removeList, false);
        for (var j = 0, k = options.length; j < k; j++) {
            var el = document.createElement("option");
            el.textContent = el.value = options[j];
            selects[i].appendChild(el);
        }
        form.appendChild(select);
    }
}
function removeList(ev) {
    var el = ev.currentTarget,
        value = el.value;
    for(var i = 0, l = selects.length; i<l; i++){
        if(selects[i].isSameNode(el)){continue;}
        var options = selects[i].childNodes;
        for(var j = 0, k = options.length; j < k; j++){
            if(options[j].value == value){
                selects[i].remove(j);
                j--;k--;
            }
        }
    }
}
<form id="mainForm" action= "" method ="get">
    Criteria One:
</form>