0

我有两个<select>具有不同 ID 的元素。

当用户从第一个选择框中选择一个值时,我希望第二个选择框只显示连接的值。

我的代码:

<select id="ExtraField_1" name="ExtraField_1">
    <option value="1">test1</option>
    <option value="2">test2</option>
    <option value="3">test3</option>
    <option value="4">test4</option>
    <option value="5">test5</option>
    <option value="6">test6</option>
    <option value="7">test7</option>
    <option value="8">test8</option>
    <option value="9">test9</option>
    <option value="10">test10</option>
    <option value="11">test11</option>
    <option value="12">test12</option>
</select>
<select id="ExtraField_2" name="ExtraField_2">
    <option value="1">test1</option>
    <option value="2">test2</option>
    <option value="3">test3</option>
    <option value="4">test4</option>
    <option value="5">test5</option>
    <option value="6">test6</option>
    <option value="7">test7</option>
    <option value="8">test8</option>
    <option value="9">test9</option>
    <option value="10">test10</option>
    <option value="11">test11</option>
    <option value="12">test12</option>
    <option value="13">test13</option>
    <option value="14">test14</option>
    <option value="15">test15</option>
    <option value="16">test16</option>
    <option value="17">test17</option>
    <option value="18">test18</option>
    <option value="19">test19</option>
    <option value="20">test20</option>
</select>

因此,当用户从第一个选择框中选择“test1”时,他将在第二个选择框上只看到“test2”、“test3”和“test4”;第一个中的“test2”将在第二个框中显示“test6”、“test7”和“test8”。

如何使用 JavaScript 来解决这个问题?

4

2 回答 2

0

如果您可以使用 jQuery,那么您始终可以清除并将选项附加到第二个选择。

    $('#ExtraField_1').change(function(){
        $('#ExtraField_2').find('option').remove()
        if($(this).val() == '1'){
           $('#ExtraField_2').append($("<option </option>").attr('value','2').text('test2'));
           $('#ExtraField_2').append($("<option></option>").attr('value','3').text('test3'));
           $('#ExtraField_2').append($("<option></option>").attr('value','4').text('test4'));
        }
        if($(this).val() == '2'){
           $('#ExtraField_2').append($("<option></option>").attr('value','5').text('test5'));
           $('#ExtraField_2').append($("<option></option>").attr('value','6').text('test6'));
           $('#ExtraField_2').append($("<option></option>").attr('value','7').text('test7'));
        } 
   });

​</p>

http://jsfiddle.net/8XVuv/2/

仅使用 javascript 有点复杂,但我仍然会采用相同的方法。

    function createOption(otext,oValue){
        var newOption = document.createElement('option');
        newOption.text = otext;
        newOption.value = oValue;
        return newOption;
    }

    function clearSelect(theSelect){
        for(var i = 0;i <= theSelect.options.length+1;i++)
        {
            theSelect.remove();
        }
    }

    function onSelect(theSelect){
        var nextSelect = document.getElementById('ExtraField_2');
        clearSelect(nextSelect);
        var selected = theSelect.options[theSelect.selectedIndex];

        if(selected.value == 1){
            nextSelect.add(createOption('test2','2'));
            nextSelect.add(createOption('test3','3'));
            nextSelect.add(createOption('test4','4'));
        }
        if(selected.value == 2){
            nextSelect.add(createOption('test5','5'));
            nextSelect.add(createOption('test6','6'));
            nextSelect.add(createOption('test7','7'));
        }

    }

用html:

<select id="ExtraField_1" name="ExtraField_1" onchange="javascript: onSelect(this);" >
    <option value="0">Select a test..</option>
    <option value="1">test1</option>
    <option value="2">test2</option>
    <option value="3">test3</option>
    <option value="4">test4</option>
    <option value="5">test5</option>
    <option value="6">test6</option>
    <option value="7">test7</option>
    <option value="8">test8</option>
    <option value="9">test9</option>
    <option value="10">test10</option>
    <option value="11">test11</option>
    <option value="12">test12</option>
</select>

<select id="ExtraField_2" name="ExtraField_2">
    <option value="0">Select from the left</option>
</select>​

如您所见,它仍然可以满足您的期望,但您并没有隐藏选项。

http://jsfiddle.net/upKzW/13/

于 2012-11-21T16:39:59.600 回答
0
 $('#ExtraField_1').change(function() {
 $('#ExtraField_2').val(this.value);

});

http://jsfiddle.net/judearasu/rF8G6/

于 2012-11-21T18:31:20.517 回答