【发布时间】:2016-07-28 08:14:47
【问题描述】:
我有两个带有值的下拉列表。当我在第一个中选择一个值时,我想在第二个中返回具有相同所选值的元素。第二个列表取决于第一个列表的选择。我怎么能这样做?
<div class="form-group">
<label for="first">First list</label>
<select id="first" class="form-control" role="listbox" onchange="filterList();">
<option value="Select level 1" selected="selected">Select...</option>
<option value="Option 1">Option 1</option>
<option value="Option 2">Option 2</option>
</select>
</div>
<div class="form-group">
<label for="second">Second list</label>
<select id="second" class="form-control" role="listbox">
<option value="Select level 2" data-group="Select" selected="selected">Select...</option>
<option value="Option 1 - 1" data-group="Option 1">First list 1 - Element 1</option>
<option value="Option 1 - 2" data-group="Option 1">First list 1 - Element 2</option>
<option value="Option 2 - 1" data-group="Option 2">First list 2 - Element 1</option>
<option value="Option 2 - 2" data-group="Option 2">First list 2 - Element 2</option>
</select>
</div>
jQuery 脚本
function filterList(){
var first = $("#first").find('option:selected').text(); // stores first list selected elements
$("#option-container").children().appendTo("#second"); // moves <option> contained in #option-container back to their <select>
var toMove = $("#second").children("[data-group!='"+first+"']"); // selects elements to move out
toMove.appendTo("#option-container"); // moves elements in #option-container
$("#second").removeAttr("disabled"); // enables select
};
【问题讨论】:
-
首先,不要在第二次选择中为此使用
value。否则,您将无法确定在第二个下拉菜单中选择了哪个选项。 -
我看到你更新了你的
<option>s,如果我让你感到困惑,我很抱歉。但我想说的是,您可能应该保持您的values 唯一,因为在读取所选<option>的<select>, thevalue` 的值时会返回。因此value-attribute 将是您区分<option>s 的唯一方法。我建议您使用名为data-group的属性将第二个下拉列表的<option>s 连接到第一个下拉列表的values。 -
如何将第一个列表
values与第二个列表data-group链接? -
是的,就像您所做的那样,如果在第一个选项中选择了哪个选项,您会看到需要显示第二个下拉列表的哪些选项。但是因为您稍后可能会使用第二个下拉列表的结果,所以那里的每个选项都需要一个唯一的
value。