【问题标题】:Behavior of val() for multiple select in jQuery changed?jQuery 中多选的 val() 行为改变了吗?
【发布时间】:2011-09-15 14:49:49
【问题描述】:

所以在我看到的每个地方,每个人都说要在多选元素中输出选定选项的值,应该使用类似于以下$('#selid :selected').val() 的东西,在这种情况下 val() 将返回一个值数组。好吧,我无法复制这种行为。据我所知,此类代码仅返回第一个选定的值。 Here's a quick jsfiddle snippet that demonstrates that.

请注意,使用 each 遍历 $('#selid :selected') 确实有效,但据我所知,对该数组调用 val() 不会产生值数组。事实上,调用$('#selid :selected').val().each(... 会导致错误消息。

那么,是我做错了什么还是这种行为在某个时候改变了?

【问题讨论】:

  • 你的 JSfiddle 对我有用...如果我选择项目 2 和 3 并单击按钮,23 会出现在下面的框中。
  • @Tomalak $('#selid :selected').val() 返回一个字符串,而不是一个数组。
  • @LightnessRacesinOrbit,您的第二条评论比第一条有用得多。感谢您分享您的第二个想法。

标签: jquery select


【解决方案1】:

“在这种情况下 val() 将返回一个值数组。好吧,我无法复制这种行为。”

您永远不需要使用:selected 来获取<select> 的值。这就足够了:

$('#selid').val()

演示:http://jsfiddle.net/mattball/WZRmD/

【讨论】:

  • @Tomalak:嗯,是的。查看演示。
  • @Fosco @Tomalak: “在这种情况下 val() 将返回一个值数组。好吧,我无法复制这种行为。” OP 正在尝试弄清楚如何获取值的数组。
  • @Fosco:是吗?对我来说看起来像一个数组。
  • @Tomalak 啊是的......在控制台中它显然是一个数组,在 OP 的小提琴中,当它被放置为 div 的内容时,它似乎是一个字符串。
  • @Fosco 它 OP 的小提琴中的一个字符串。
【解决方案2】:

val 函数获取匹配元素集中first 元素的值。要获取多个选定项目的值,当使用 :selected 选择器时,您需要遍历集合,正如您在问题中提到的那样。

有关更多信息,请阅读jQuery API 以获取val()

【讨论】:

  • 我已经添加了一些说明 - 在使用 :selected 选择器时,您需要遍历匹配的元素集。
  • 实际上,我没有看到 jQuery 文档对 val() 和 :selected).val() 进行了区分。据我所知,他们基本上是在说 $('select.foo option:selected').val();和 $('select.foo').val();是等价的,但显然情况并非如此。
  • @ilia 我同意 jQuery API 文档在使用 :selected 的建议中有点误导。正如我在回答中所说,在实践中,您几乎总是可以直接在 <select> 本身上调用 .val(),您会得到您所期望的。
猜你喜欢
  • 2011-02-13
  • 1970-01-01
  • 2015-12-16
  • 2020-07-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多