应用过滤器时动态更新所选选项?

Posted

技术标签:

【中文标题】应用过滤器时动态更新所选选项?【英文标题】:Update selected option dynamically when filter is applied? 【发布时间】:2016-11-19 13:39:53 【问题描述】:

我有两个表单,每个表单都有一个选择字段和一些选项。第一个表单用作第二个表单的过滤器,但是当我在第一个表单中选择某些内容时,第二个表单更新正常,但所选选项仍然存在,即使它已被过滤掉。我该如何解决这个问题?尝试使用 option:first-child 方法,但它似乎不起作用。

到目前为止,这是我的代码(我对 jQuery 非常非常陌生)

<form action="select.php" method="post">
    <select name="color" id="color">
        <option value="blue">Blue</option>
        <option value="red">Red</option>
        <option value="purple">Purple</option>
        <option value="orange">Orange</option>
    </select>
</form>

<form action="select.php" method="post">    
    <select name="character" id="character">
        <option value="leo" class="blue">Leo</option>
        <option value="smurf" class="blue">Smurf</option>
        <option value="thedevil" class="red">The Devil</option>
        <option value="raphael" class="red">Raphael</option>
        <option value="donnatello" class="purple">Donnatello</option>
        <option value="mike" class="orange">Mike</option>
    </select>   
</form>

<script>
    $('#color').change(function() 
        var myColor = $('#color option:selected').val();
        $('#character option').hide();
        $('#character option').filter("." + myColor).show();
        $('#character option:first-child').attr("selected", "selected");
    );    
</script>

【问题讨论】:

【参考方案1】:

您需要将#character 选择的值设置为与过滤器匹配的第一个option,而不是选择中的第一个子项,因为它永远不会改变。试试这个:

$('#color').change(function() 
    var myColor = $('#color').val();
    $('#character option').hide().filter("." + myColor).show().first().prop("selected", true);
).change();

Working example

【讨论】:

以上是关于应用过滤器时动态更新所选选项?的主要内容,如果未能解决你的问题,请参考以下文章

嵌套 Rails 表单中的动态值未更新

IE 11不会更新选择元素中选定的选项项标签

如何动态调整 select2 输入的大小,使其与所选选项的宽度相同?

带有用户单击所选组件的动态选项卡

在不更改选定选项卡的情况下动态更新 TabLayout

如何根据设置选择在选项卡栏视图中创建动态更新的视图?