【问题标题】:remove the option selected in one dropdown list field and don't show in other dropdown list present in that row not working- jquery删除在一个下拉列表字段中选择的选项,并且不显示在该行中存在的其他下拉列表中不起作用-jquery
【发布时间】:2019-04-24 14:46:45
【问题描述】:

我有一个包含多列的 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

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

【问题讨论】:

  • Demo 的代码与显示的不同??您是否忘记在 plunker 中进行更新保存?

标签: javascript jquery html


【解决方案1】:

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

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

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

});

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

应考虑保留一个存储在变量中的所有选项的副本,以便在后续更改期间查找丢失的选项

【讨论】:

  • 抱歉,忘记使用上面发布的代码更新 plunker。请使用您的代码找到更新的 plunker。plnkr.co/edit/1OCAW5U4YjJ9UasFmafl?p=preview。我在这里看到了两个挑战。第一个如上所述,如果用户在下拉列表中选择了一个选项并再次重新选择另一个选项,则删除的元素不会显示在 Select Product2 下拉列表中。另一个挑战是,如果用户从 Select Product2 下拉列表中选择选项,所选选项不会从 SelectProduct1 列表中删除,因为我将代码包含在 $("select").change
  • 那么可以使用$('#myTable select')。我没有仔细查看 html 中的类,因为我认为您的选择器会同时包含两者。两个集合上的共同课程会有所帮助
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多