【问题标题】:Nested dropdown lists : depending values嵌套下拉列表:取决于值
【发布时间】: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。否则,您将无法确定在第二个下拉菜单中选择了哪个选项。
  • 我看到你更新了你的&lt;option&gt;s,如果我让你感到困惑,我很抱歉。但我想说的是,您可能应该保持您的values 唯一,因为在读取所选&lt;option&gt;&lt;select&gt;, the value` 的值时会返回。因此value-attribute 将是您区分&lt;option&gt;s 的唯一方法。我建议您使用名为data-group 的属性将第二个下拉列表的&lt;option&gt;s 连接到第一个下拉列表的values。
  • 如何将第一个列表 values 与第二个列表 data-group 链接?
  • 是的,就像您所做的那样,如果在第一个选项中选择了哪个选项,您会看到需要显示第二个下拉列表的哪些选项。但是因为您稍后可能会使用第二个下拉列表的结果,所以那里的每个选项都需要一个唯一的value

标签: jquery html dropdown


【解决方案1】:

您可以通过将它们的 css 属性 display 设置为 none 来隐藏选项,这就是 jQuery 的 $.hide() 函数所做的。或者您可以在元素 ($.attr('disabled', 'disabled')) 上设置 disabled-attribute 以使选项无法选择。

编辑

你可以做什么的一个小例子(虽然我没有测试过):

$('#first').change(function() {
    var value = $(this).val();
    $('#second').children().attr('disabled', 'disabled');
    $('#second').children('[data-group=' + value + ']').removeAttr('disabled');
});

这将每次选择第一个下拉列表中的某些内容时,禁用第二个下拉列表中的所有选项并重新启用第二个下拉列表中的所有选项,data-group-attribute 对应于第一个下拉列表中选定的value .

【讨论】:

  • 我找到了一个定义多级相关下拉列表的脚本,我已经更新了我的帖子。我的问题:由于generateOptions,它仅限于四个列表,但不是我的第二个列表。
  • 您链接的页面没有提供太多信息。我真的不明白该脚本的作用以及您希望如何将其与您的问题联系起来。您从未提到您需要随时随地生成选项。您能否更准确地解释您想要什么以及您如何尝试使用帖子中显示的脚本?
  • 抱歉,不清楚并且有点不同:这个例子只是展示了如何链接多个列表。在我的情况下,我想要 2 个列表:第一个包含多个值,很简单。第二个由第一个列表选择定义,并且仅返回第一个列表的值相同values。这是两次选择。
  • 没关系,我就是这样post,最后评论。谢谢你的帮助,你让我一路走好。
猜你喜欢
  • 2018-09-16
  • 1970-01-01
  • 1970-01-01
  • 2015-12-20
  • 1970-01-01
  • 1970-01-01
  • 2020-02-18
  • 1970-01-01
  • 2017-07-29
相关资源
最近更新 更多