我认为这是一个错误,但我在这篇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();
请不要让我解释为什么列表中有选定的,禁用的项目....让我们把它放在非常复杂和不妥协的业务规则上。
答案 0 :(得分:1)
使用option:selected
,而不是option[selected]
。后者仅匹配HTML中具有selected
属性的选项;你必须使用:selected
来测试他们当前的选择状态。
此外,.val()
仅返回所选第一个元素的值。如果要获取多选的所有值,则需要映射它们。
var selected_values = $(ele).find("option:selected").map(function() {
return this.value;
}).get();