在一个表格中,有n个(select控件),每一个select控件的值都是(1至n)。
    我想用JS来实现这样子的功能:
    例如:我在其中一个控件中选择了(1),那么剩下的n-1个控件的值都要变为(1至n-1)。当在第二个控件中选择(2),那么剩下的n-2个控件的值都要变为(1至n-3)。请注意,是当点击任何一个控件,都可以实现这个功能。    其实我最终想实现的功能是:我在其中一个控件中选择了(x),那么剩下的n-1个控件的值都要变为(1至n中除x之外大的剩余值)。当在第二个控件中选择(y),那么剩下的n-2个控件的值都要变为(1至n中除x、y之外的剩余值)。当点击第三、第四、第五至第n个控件时,实现的功能都是类推下去的。
    请问各位大虾们,这样子的JS应该怎么写????

解决方案 »

  1.   

    记录选过的select的序号和值,每选一次初始化所有未选的select的option
      

  2.   

    用jQuery:
    <select>
        <option value="">请选择</option>
        <option value="1">1</option>
        <option value="2">2</option>
        <option value="3">3</option>
    </select>
    <select>
        <option value="">请选择</option>
        <option value="1">1</option>
        <option value="2">2</option>
        <option value="3">3</option>
    </select>
    <select>
        <option value="">请选择</option>
        <option value="1">1</option>
        <option value="2">2</option>
        <option value="3">3</option>
    </select>var selects = $('select');
    selects.change(function() {
        selects.not(this).find('option[value=' + $(this).val() + ']').remove();
    });
      

  3.   

    给这些控件的ID赋值,比如说"control1"\"control2",从第八个字符起,也就是数字起,截取后面的字符,然后转化为数值型,转换方法如下:
    1.转换为字符型:String(); 例:String(678)的结果为"678"
    2.转换为数值型:Number(); 例:Number("678")的结果为678
    3.转换为布尔型:Boolean(); 例:Boolean("aaa")的结果为true获取控件总的个数,从选择的那个控件开始,一直到最后一个,通过"control"+数字的形式,一个个地赋值.
      

  4.   

    写了一个,应该是差不多了
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>无标题文档</title>
    <script type="text/javascript">
    function initData(oSel, nMax){
    oSel.options.length = 0;
    oSel.options.add(new Option('请选择', ''));
    for(var i = 1; i <= nMax; i++){
    oSel.options.add(new Option(i, i));
    }
    }
    function reomveOption(sels, index, value){
    var i = 0, j, len = sels.length;
    for(i = 0; i < len; i++){
    if( i != index ){
    for(j = 0; j < sels[i].options.length; j++){
    if(sels[i].options[j].value == value){
    sels[i].remove(j);
    }
    }
    }
    }
    }
    function insertOption(sels, index, value){
    var i = 0, j, len = sels.length, opt;
    for(i = 0; i < len; i++){
    if( i != index ){
    opt = new Option(value, value);
    document.all && (opt.innerHTML = value);
    for(j = 0; j < sels[i].options.length; j++){
    if(sels[i].options[j].value > value){
    sels[i].insertBefore(opt, sels[i].options[j]);
    break;
    }
    }
    if(j >= sels[i].options.length){
    sels[i].options.add(opt);
    }
    }
    }
    }
    window.onload = function(){
    var tb = document.getElementById("tb"),
    sels = tb.getElementsByTagName("select"),
    i, len = sels.length;
    for(i = 0; i < len; i++){
    initData(sels[i], len);
    (function(i){
    sels[i].onchange = function(){
    if(this.prevValue){
    insertOption(sels, i, this.prevValue);
    this.prevValue = null;
    }
    if(this.selectedIndex > 0){
    reomveOption(sels, i, this.prevValue = this.options[this.selectedIndex].value);
    }
    };
    })(i);
    }
    };
    </script>
    </head><body>
    <table id="tb" cellpadding="5">
    <tr><td>1</td><td><select></select></td></tr>
        <tr><td>2</td><td><select></select></td></tr>
        <tr><td>3</td><td><select></select></td></tr>
        <tr><td>4</td><td><select></select></td></tr>
        <tr><td>5</td><td><select></select></td></tr>
        <tr><td>6</td><td><select></select></td></tr>
    </table>
    </body>
    </html>
      

  5.   

    var selects = $('select');
    selects.change(function() {
        selects.not(this).find('option[value=' + $(this).val() + ']').remove();
    })
      

  6.   

    39行的 sels[i].options.add(opt);
    换成 sels[i].appendChild(opt);上面的在IE下会报错```
      

  7.   

    有没给select设置个名字呢<table id="tb" cellpadding="5">
        <tr><td>1</td><td><select name="sel1"></select></td></tr>
        <tr><td>2</td><td><select name="sel2"></select></td></tr>
        <tr><td>3</td><td><select ...></select></td></tr>
        <tr><td>4</td><td><select></select></td></tr>
        <tr><td>5</td><td><select></select></td></tr>
        <tr><td>6</td><td><select></select></td></tr>
    </table>
    再这样,取不到值吗?Request.Form["sel1"]