删除在一个下拉列表字段中选择的选项,并且不显示在该行不存在的其他下拉列表中

时间:2018-11-22 00:00:21

标签: javascript jquery html

我有一个包含多列的html表,在两列中我正在显示下拉列表。当用户从一个下拉列表中选择值时(选择Product1 或“选择Product2”下拉列表),我想删除一个下拉列表中选择的选项,而不在另一个下拉列表中显示该选项...

以下示例代码适用于表(选择产品1,选择产品2)中所有可用的下拉列表的类名相同的情况,但在我的情况下 下拉列表的类名对于表中的每个列都是相同的,这会破坏下面的代码。

var $combo = $(".combo");
$combo.on("change", function () {
    var select = this,
        selected = $("option:selected", this).text();

    $combo.each(function (_, el) {
        if (el !== select) {
            $("option", el).each(function (_, el) {
                var $el = $(el);
                if ($(el).text() === selected) {
                    $el.remove();
                }
            });
        }
    });
});

示例演示:http://plnkr.co/edit/VSdhVfhyIfI0rV6efrZv?p=preview

在上面的演示中,当用户从一个下拉列表中为一行选择产品“ laptop”时,该行中的另一个下拉列表中不应显示“ laptop”选项...

1 个答案:

答案 0 :(得分:1)

查找同一行,而不是遍历表中的所有选择。同样,匹配值也更简单

$combo.on("change", function() {
  var $sel = $(this),
       val = $sel.val();

  $sel.parent().siblings().find('.combo option[value=' + val + ']').remove()

});

但是请注意,您还有一个不同的问题,即如果用户更改了先前选择的一个,您将无法重新插入一个。

应该考虑保留所有存储在变量中的选项的克隆,以便您可以在后续更改中查找缺失的选项