jquery - 3级依赖选择列表

时间:2017-06-10 11:39:28

标签: javascript jquery drop-down-menu

标题可能有点令人困惑,但在这里我们详细介绍。 所以我有3个下拉列表。第二个'select'元素中的选项必须是唯一的,基于第一个'select'选择选项中的选定选项。 与第三个相同的是,它应该具有基于第二个“选择”选择选项中所选选项的唯一选项。

据我所知,我可以根据我在第一个“选择”中选择的内容更改第二个“选择”选项,但是当我更改第二个“选择”选项时,第三个“选择”选项根本不改变。 这是HTML:

<select id="item1">
<option value="0">1 item</option>
<option value="1">2 item</option>
<option value="2">3 item</option>
</select>

<select id="item2">
<option value="">-- select one -- </option>
</select>

<select id="item3">
<option> -- select another one --</option>
</select>

这是jquery:

$(document).ready(function() {


$("#item1, #item2").change(function() {
    var value = $(this).val();
    $("#item2").html(options[value]);

    var value1 =$("#item2").val();
    $("item3").html(options[value]);
});


var options = [
    "<option value='test'>item1: test 1</option><option value='test2'>item1: test 2</option>",
    "<option value='test'>item2: test 1</option><option value='test2'>item2: test 2</option>",
    "<option value='test'>item3: test 1</option><option value='test2'>item3: test 2</option>"
];


var options1 = ["<option value='test'>item33313: test 3332233</option>
<option value='test3'>item333: test 33333</option>","<option 
value='test'>item33313: tesdadadadadat 3332233</option><option 
value='test3'>item333: test 33333</option>","<option 
value='test'>itlolooloem33313: test 3332233</option><option 
value='test3'>item333: ltoltrolltest 33333</option>"];

});
这是JSfiddle:     http://jsfiddle.net/2hyda4b1/ 任何帮助/提示都很受欢迎!

2 个答案:

答案 0 :(得分:0)

您的代码存在一些问题。

首先,

$("item3").html(options[value]);

应更改为:

$("#item3").html(options1[value]);

接下来,第二个下拉列表的选项列表:

var options = [
    "<option value='test'>item1: test 1</option><option value='test2'>item1: test 2</option>",
    "<option value='test'>item2: test 1</option><option value='test2'>item2: test 2</option>",
    "<option value='test'>item3: test 1</option><option value='test2'>item3: test 2</option>"
];

应该具有&#39;值&#39;属性更新如:

var options = [
        "<option value='0'>item1: test 1</option><option value='test2'>item1: test 2</option>",
        "<option value='1'>item2: test 1</option><option value='test2'>item2: test 2</option>",
        "<option value='2'>item3: test 1</option><option value='test2'>item3: test 2</option>"
    ];

我已更新您的jsFiddle http://jsfiddle.net/2hyda4b1/2/

<强>更新

这是一个可能有帮助的解决方案:

使用Javascript:

       <script type="text/javascript">
            var opt1 = ['Opt A', 'Opt B', 'Opt C'],
                opt2 = [
                    ['OptA A', 'OptA B', 'OptA C'],
                    ['OptB A', 'OptB B', 'OptB C'],
                    ['OptC A', 'OptC B', 'OptC C']
                ],
                opt3 = [
                    [
                        ['OptAA A', 'ObtAA B', 'OptAA C'],
                        ['OptAB A', 'ObtAB B', 'OptAB C'],
                        ['OptAC A', 'ObtAC B', 'OptAC C'],
                    ],
                    [
                        ['OptBA A', 'ObtBA B', 'OptBA C'],
                        ['OptBB A', 'ObtBB B', 'OptBB C'],
                        ['OptBC A', 'ObtBC B', 'OptBC C'],
                    ],
                    [
                        ['OptCA A', 'ObtCA B', 'OptCA C'],
                        ['OptCB A', 'ObtCB B', 'OptCB C'],
                        ['OptCC A', 'ObtCC B', 'OptCC C'],
                    ]
                ];
            jQuery(document).ready(function() {
                // populating first dropdown when the page loads...
                jQuery.each(opt1, function(i, e) { jQuery('#select1').append('<option value="'+i+'">'+e+'</option>'); });
                jQuery('body').on('change', '#select1', function() {
                    jQuery('#select2').empty();
                    jQuery.each(opt2[jQuery('#select1').val()], function(i, e) { jQuery('#select2').append('<option value="'+i+'">'+e+'</option>'); });
                });
                jQuery('body').on('change', '#select2', function() {
                    jQuery('#select3').empty();
                    jQuery.each(opt3[jQuery('#select1').val()][jQuery('#select2').val()], function(i, e) { jQuery('#select3').append('<option value="'+i+'">'+e+'</option>'); });
                });
            });
        </script>

HTML:

    <select id="select1">

    </select>
    <select id="select2">

    </select>
    <select id="select3">

    </select>

更新2:

试试这个jsFiddle

答案 1 :(得分:0)

请参阅以下代码并添加http://jsfiddle.net/2hyda4b1/7/

$(document).ready(function() {


$("#item1, #item2").change(function() {
    if($(this).attr('id') == 'item1')
  {
    var value = $(this).val();
    $("#item2").html(options[value]);
  }else if($(this).attr('id') == 'item2')
  {
     var value1 =$("#item2").val();
    $("#item3").html(options1[value1]);
  }



});


var options = [
    "<option value='0'>item1: test 1</option><option value='1'>item1: test 2</option>",
    "<option value='1'>item2: test 1</option><option value='2'>item2: test 2</option>",
    "<option value='2'>item3: test 1</option><option value='0'>item3: test 2</option>"
];


var options1 = ["<option value='0'>item33313: test 3332233</option><option value='1'>item333: test 33333</option>","<option value='0'>item33313: tesdadadadadat 3332233</option><option value='1'>item333: test 33333</option>","<option value='1'>itlolooloem33313: test 3332233</option><option value='2'>item333: ltoltrolltest 33333</option>"];
});