我有一个包含多列的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”选项...
答案 0 :(得分:1)
查找同一行,而不是遍历表中的所有选择。同样,匹配值也更简单
$combo.on("change", function() {
var $sel = $(this),
val = $sel.val();
$sel.parent().siblings().find('.combo option[value=' + val + ']').remove()
});
但是请注意,您还有一个不同的问题,即如果用户更改了先前选择的一个,您将无法重新插入一个。
应该考虑保留所有存储在变量中的选项的克隆,以便您可以在后续更改中查找缺失的选项