如何在禁用某些值时从多选中获取所有选定值?

时间:2015-12-29 20:45:31

标签: jquery

我认为这是一个错误,但我在这篇bug ticket中读到的是,所谓的聪明人负责保护jquery说这不被认为是一个错误(尽管在之前的版本中返回了禁用的项目) 1.8.3)。 See comment 8

我正在检查这样的价值

validates_format_of :username, :with => /\A(([ _]*)(?!(about|admin|root|etc)[ _])[^ _]+)+([ _]+|\z)\z/

但是,当只有禁用的项目处于选定状态时,结果为[]

我想也许我可以像下面那样得到它们,但结果是""

$(ele).val();

我也尝试了以下内容,它返回了一个选项数组,而不是一个值数组。

$(ele).find("option[selected]").val();

请不要让我解释为什么列表中有选定的,禁用的项目....让我们把它放在非常复杂和不妥协的业务规则上。

1 个答案:

答案 0 :(得分:1)

使用option:selected,而不是option[selected]。后者仅匹配HTML中具有selected属性的选项;你必须使用:selected来测试他们当前的选择状态。

此外,.val()仅返回所选第一个元素的值。如果要获取多选的所有值,则需要映射它们。

var selected_values = $(ele).find("option:selected").map(function() {
    return this.value;
}).get();