【问题标题】:How to change a seleclist options from another selectlist?如何从另一个选择列表更改选择列表选项?
【发布时间】:2015-08-05 18:26:45
【问题描述】:

我有两个选择器。我想从第一个选择列表中过滤第二个选择列表选项。

代码如下:

$(document).ready(function() {
    $('#sehir').change(function() {
        var sehir = $(this).find('option:selected').text();
        var options = $('#ilce').filter('[label=' + sehir + ']');
        $('#ilce').html(options);
    });
});

还有第一个选择列表:

<select name="sehirid" id="sehir" class="form-control">
    <option value="1">Option 1</option>
    <option value="2">Option 2</option>
    <option value="3">Option 3</option>
</select>

第二个选择列表:

<select name="ilceid" id="ilce" class="form-control">
    <optgroup label="Option 1">
        <option parent="Option 1" value="1">Option 1</option>
        <option parent="Option 1" value="2">Option 2</option>
        <option parent="Option 1" value="3">Option 3</option>
    </optgroup>
    <optgroup label="Option 2">
        <option parent="Option 2" value="1">Option 1</option>
        <option parent="Option 2" value="2">Option 2</option>
        <option parent="Option 2" value="3">Option 3</option>
    </optgroup>
    <optgroup label="Option 3">
        <option parent="Option 3" value="1">Option 1</option>
        <option parent="Option 3" value="2">Option 2</option>
        <option parent="Option 3" value="3">Option 3</option>
    </optgroup>
</select>

但是这段代码不起作用。怎么了?

【问题讨论】:

标签: jquery selectlist optgroup


【解决方案1】:

两个问题;首先filter() 应该是find(),因为您正在搜索#ilce 元素的子元素。其次,您需要将属性选择器中的值用引号括起来。试试这个:

$('#sehir').change(function() {
    var sehir = $(this).find('option:selected').text();
    var options = $('#ilce').find('optgroup[label="' + sehir + '"]');
    $('#ilce').html(options);
});

Example fiddle

请注意,这只会一次起作用,因为您会在第一次选择后删除其他选项组。如果您希望能够更改选择,您可以禁用其他 optgroup 元素,如下所示:

$('#sehir').change(function() {
    var sehir = $(this).find('option:selected').text();
    var optgroup = $('#ilce').find('optgroup[label="' + sehir + '"]');
    $('#ilce').find('optgroup').prop('disabled', false).not(optgroup).prop('disabled', true);
});

Example fiddle

【讨论】:

  • 感谢您的帮助。但我想再问一个问题。如何删除第二个选择列表下未选择的 optgroup?
  • 第一个例子就是这样做的。
  • 第一个例子,你说只工作一次,你的第二个例子,只是禁用未选择的选项。但我想删除未选择的选项作为您的第二个示例。
【解决方案2】:

您想查找特定组下的所有选项。这可以通过以下方式实现:

var options = $('optgroup[label="' + sehir + '"]').find('option');

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-04
    • 1970-01-01
    • 2022-01-06
    • 2017-01-11
    • 2012-05-21
    • 1970-01-01
    相关资源
    最近更新 更多