[英]Display options in a drop-down based on what is selected in another drop-down
我想基于另一个下拉菜单中已经选择的内容在下拉菜单中显示选项。 我在第一个下拉列表中有16个选项,因此我想在第二个下拉列表中为第一个下拉列表中的每个选择显示不同的选项。 我想使用javascript或jquery做到这一点。
这是我的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>
我想在此下拉菜单中显示不同的选项,具体取决于为“失败原因”选择的内容:
<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>
我看过其他示例,但与我要实现的目标完全不同。 我需要能够显示和选择要在我的JavaScript文件的其他部分中使用的任何选项的“值”。
编辑:
我意识到我的问题有点令人困惑。 我会尝试更加清楚。 如果出于故障原因选择“损坏”,我想显示:
<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>
但是,如果选择“校准失败”,我想显示:
<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小提琴解决方案:
不是最好的解决方案,但可行的。 首先选择一个文本内容列表,然后将其与第二个选项中的可用选项链接起来。
我使用了第一个的textContent并将其与第二个的选项值链接。 但是您可以基于选项的不同属性(id,value,text content ...)进行链接。
您可以使用this.options[this.selectedIndex].textContent
从当前选择的选项中获取文本内容。
PS:如果数组为空,则所有选项均可用...
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();
}
});
编辑:我的解决方案只是一个简短的版本。 它仅在您更改第一选择时起作用,并且不会影响当前选择的选项。 但是我相信您可以自己解决这个问题;)
希望您已经得到答案,但是很容易回答。 查看此帖子,我没有任何评论的信誉,因此请发布为答案。 检查此答案是否清楚。
在第一个下拉菜单上使用.change
事件,获取值,然后执行所需的操作:
$("#failureReason").change(function() {
var selected = this.value;
var second = $("#solutionId option:selected").val();
});
首先,您必须定义组合。
var combinations = {
"option1": ["option1-a", "option1-b", "option1-c"],
"option2": ["option2-a", "option2-b", "option2-c"],
"option3": ["option3-a", "option3-b", "option3-c"]
}
因此,在第一个下拉列表中,您将添加一个.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);
});
如果您会注意到,我只给了每个选项与显示的文本相同的值。 给每个选项一个自定义值会很简单。
JSFiddle: http : //jsfiddle.net/2hwp9/
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.