HTML 多个上拉框联动 JS 示例代码(论坛回复摘要)

HTML 多个下拉框联动 JS 示例代码(论坛回复摘要)

问题

HTML 多个下拉框有相同的数据,选中一个数据其他下拉框删除这个数据,用js怎么实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<body
 <div align="center">两个下拉框你只能选择不同的值<br>
    <select id="Color_1" onChange="ddlChange1(this.value);">
      <option selected value=''>你的WEB编程语言</option>
      <option value='ASP'>ASP</option>
      <option value='PHP'>PHP</option>
      <option value='JSP'>JSP</option>
      <option value='CGI'>CGI</option>
    </select>
    <select id="Color_2" onChange="ddlChange2(this.value);">
      <option selected value=''>你的WEB编程语言</option>
      <option value='ASP'>ASP</option>
      <option value='PHP'>PHP</option>
      <option value='JSP'>JSP</option>
      <option value='CGI'>CGI</option>
    </select>
<select id="Color_3" onChange="ddlChange3(this.value);">
      <option selected value=''>你的WEB编程语言</option>
      <option value='ASP'>ASP</option>
      <option value='PHP'>PHP</option>
      <option value='JSP'>JSP</option>
      <option value='CGI'>CGI</option>
    </select>
  </div>
</body>


答复

1 楼 的方案的问题是,当再次在第一个下拉框选择不同的值后,第二个下拉框的选择就丢失了一个(在第一轮选择时被removeChild给消除了!)。所以这里不能消除,只能隐藏。具体如下,

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
function ddlChange1(v){
    displayOptions(2, [v]);
    displayOptions(3, [v]);
    ddlChange1.hiddenOption = v;  // keep the hidden value for ddlChange2
}
 
function ddlChange2(v){
    displayOptions(3, [ddlChange1.hiddenOption, v]);
}
 
function ddlChange3(v){
}
 
function displayOptions(selectIndex, hiddenOptions){
    // Get select element
    var el = document.getElementById('Color_' + selectIndex);
    el.value = '';
     
    var i;
     
    // Prepare hidden option set
    var hSet = {};
    for (i=0; i<hiddenOptions.length; i++) {
        hSet[hiddenOptions[i]] = true;
    }
     
    // hide the hidden options and show the others
    var ops = el.options;
    for(i=0 ; i < ops.length ; ++i) {
        if(hSet[ops[i].value]){               
            ops[i].style.display = "none"// hide
        else {
            ops[i].style.display = "";     // show
        }
    }
}

这个解决方案,可以,使用者可以从左到右,退回,反复选择,直到满意为止。
例如:
第一轮:选择一,选择二,选择三
第二轮:回过头去,选择二,选择三
第三轮:回过头去从来,选择一,选择二,选择三



连接

回复见原贴 http://bbs.csdn.net/topics/390381744