简体   繁体   English

根据在另一个下拉菜单中选择的内容在一个下拉菜单中显示选项

[英]Display options in a drop-down based on what is selected in another drop-down

I want to display options in a drop down menu based on what is already selected in another drop down menu. 我想基于另一个下拉菜单中已经选择的内容在下拉菜单中显示选项。 I have 16 options in the first drop-down, so I want to show different options in the second drop down for each selection in the first. 我在第一个下拉列表中有16个选项,因此我想在第二个下拉列表中为第一个下拉列表中的每个选择显示不同的选项。 I would like to do this using javascript or jquery. 我想使用javascript或jquery做到这一点。

Here is the first drop down in my html file: 这是我的html文件中的第一个下拉列表:

           <div>
               <label for="failureReason">Failure Reason:</label> <select
                    id="failureReason" data-theme="a" data-icon="arrow-d" data-iconpos="right">
                    <option value="1">Damage</option>
                    <option value="9">Calibration Failure</option>
                    <option value="5">Component Failure</option>
                    <option value="93">Customer Request</option>
                    <option value="5">Error on Potted SUT</option>
                    <option value="41">Installation Error</option>
                    <option value="6">Interference</option>
                    <option value="46">Network Issue</option>
                    <option value="3">No Fault Found</option>
                    <option value="8">No Power/Fuse Blown</option>
                    <option value="23">Non-AMCS Issue</option>
                    <option value="49">OBC HW Issue</option>
                    <option value="30">OBC SW Issue</option>
                    <option value="2">Training Issue</option>
                    <option value="68">Truck Not Available</option>
                    <option value="51">Routine Maintenance</option>
                </select>
                <!-- Put in options for failure reason -->
            </div>

And I want to display different options inside this drop-down depending on what has been selected for "Failure Reason": 我想在此下拉菜单中显示不同的选项,具体取决于为“失败原因”选择的内容:

<div>
                <label for="solutionId">Solution Id:</label> <select
                    id="solutionId" data-theme="a" data-icon="arrow-d" data-iconpos="right">
                    <option value="1">Repaired</option>
                    <option value="2">Restarted</option>
                    <option value="3">Reinstalled Software</option>
                    <option value="4">Replaced Loadcell</option>
                    <option value="5">Replaced SUT</option>
                </select>
                <!-- Put in options for Solution Id -->
            </div>

I've seen other examples, but nothing like what i'm trying to achieve. 我看过其他示例,但与我要实现的目标完全不同。 I need to be able to get the "value" of whatever option is shown and chosen for use in other parts of my javascript file. 我需要能够显示和选择要在我的JavaScript文件的其他部分中使用的任何选项的“值”。

EDIT: 编辑:

I realise my question is a bit confusing. 我意识到我的问题有点令人困惑。 I'll try to be more clear. 我会尝试更加清楚。 If "damage" is selected for failure reason, I want to show: 如果出于故障原因选择“损坏”,我想显示:

<div>
            <label for="solutionId">Solution Id:</label> <select
                id="solutionId" data-theme="a" data-icon="arrow-d" data-iconpos="right">
                <option value="1">Repaired</option>
                <option value="3">Reinstalled Software</option>
                <option value="4">Replaced Loadcell</option>
            </select>
            <!-- Put in options for Solution Id -->
        </div>

But if "calibration failure" is chosen, I want to show: 但是,如果选择“校准失败”,我想显示:

<div>
            <label for="solutionId">Solution Id:</label> <select
                id="solutionId" data-theme="a" data-icon="arrow-d" data-iconpos="right">
                <option value="1">Repaired</option>
                <option value="2">Restarted</option>
                <option value="5">Replaced SUT</option>
            </select>
            <!-- Put in options for Solution Id -->
        </div>

JS fiddle solution: JS小提琴解决方案:

http://jsfiddle.net/ZjhWV/1/ http://jsfiddle.net/ZjhWV/1/

Not the best solution, but working one. 不是最好的解决方案,但可行的。 Make a some list of text contents from first select and link them with available options from second one. 首先选择一个文本内容列表,然后将其与第二个选项中的可用选项链接起来。

I used textContent from first one and linked it with option values from second one. 我使用了第一个的textContent并将其与第二个的选项值链接。 But you can make link based on different property of the option (id, value, text content... ). 但是您可以基于选项的不同属性(id,value,text content ...)进行链接。

You can get text content from currently selected option with this.options[this.selectedIndex].textContent . 您可以使用this.options[this.selectedIndex].textContent从当前选择的选项中获取文本内容。

PS: In case that array is empty, all options are available... PS:如果数组为空,则所有选项均可用...

javascript: JavaScript的:

    var subselectContains = {
    "Damage": [1, 3, 5],
        "Calibration Failure": [],
        "Component Failure": [2],
        "Customer Request": [],
        "Error on Potted SUT": [1],
        "Installation Error": [],
        "Interference": [],
        "Network Issue": [],
        "No Fault Found": [],
        "No Power/Fuse Blown": [],
        "Non-AMCS Issue": [],
        "OBC HW Issue": [],
        "OBC SW Issue": [],
        "Training Issue": [],
        "Truck Not Available": [],
        "Routine Maintenance": []
};

var failureReson = $("#failureReason");
var solutionOptions = $("#solutionId option");


failureReson.change(function () {
    var visibleOptions = subselectContains[this.options[this.selectedIndex].textContent];

    if (visibleOptions.length != 0) {
        solutionOptions.hide();


        solutionOptions.each(function () {
            for (var i = 0; i <= visibleOptions.length; i++) {
                if (this.value == visibleOptions[i]) {
                    $(this).show();
                }
            }
        });
    } else {
        solutionOptions.show();
    }
});

EDIT: My solution is just a short version. 编辑:我的解决方案只是一个简短的版本。 It works only when you change first select and it doesn't affect the currently selected option. 它仅在您更改第一选择时起作用,并且不会影响当前选择的选项。 But I'm sure you can solve this on your own ;) 但是我相信您可以自己解决这个问题;)

Hope already you got answer but it is easy answer. 希望您已经得到答案,但是很容易回答。 check this post I don't have reputation to comment so posting as answer . 查看此帖子,我没有任何评论的信誉,因此请发布为答案。 check this answer its good and clear. 检查此答案是否清楚。

Javascript change drop-down box options based on another drop-down box value 基于另一个下拉框值的Javascript更改下拉框选项

Use a .change event on the first drop down, grab the value, and do what you need: 在第一个下拉菜单上使用.change事件,获取值,然后执行所需的操作:

$("#failureReason").change(function() {
    var selected = this.value;
    var second = $("#solutionId option:selected").val();
});

First you have to define the combinations. 首先,您必须定义组合。

var combinations = {
    "option1": ["option1-a", "option1-b", "option1-c"],
    "option2": ["option2-a", "option2-b", "option2-c"],
    "option3": ["option3-a", "option3-b", "option3-c"]
}

So in your first drop down you would add a .change event that would find the new value, then fill the second drop down with those options. 因此,在第一个下拉列表中,您将添加一个.change事件,该事件将查找新值,然后在第二个下拉列表中填充这些选项。

$('#failureReason').change(function(){
    var template = '<option>Solutions</option>';  // will hold html for second drop down.

    solutions = combinations[$(this).val()];
    $.each(solutions, function(i, solution){
        template += '<option value="' + solution + '">' + solution + '</option>'
    });

    $('#solutionId').html(template);
});

If you'll notice, I just gave each option the same value as the text displayed. 如果您会注意到,我只给了每个选项与显示的文本相同的值。 It would be fairly simple to give each option a custom value. 给每个选项一个自定义值会很简单。

JSFiddle: http://jsfiddle.net/2hwp9/ JSFiddle: http : //jsfiddle.net/2hwp9/

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM