jQuery多个选择器与.val()

时间:2017-08-13 19:55:26

标签: jquery

考虑:

$("[id^='txtYear_']").val();

为什么这只给了我在第一个输入框中输入的值,其ID与#34; txtYear _"?我想得到所有输入框的值,这些输入框的ID以" txtYear _"开头。

3 个答案:

答案 0 :(得分:3)

这就是val()的工作原理。您必须循环遍历元素才能获得所有值:

let vals = $("[id^='txtYear_']").map(function() {
    return $(this).val();
}).get();

let vals = $("[id^='txtYear_']").map(function() {
   return $(this).val();
}).get();

console.log(vals);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input id="txtYear_1" value="1">
<input id="txtYear_2" value="2">
<input id="txtYear_3" value="3">
<input id="txtYear_4" value="4">
<input id="txtYear_5" value="5">
<input id="txtYear_6" value="6">
<input id="txtYear_7" value="7">

或者要知道哪个是什么,你可以使用一个对象:

let vals = {};
$("[id^='txtYear_']").each(function() {
   vals[$(this).prop('id')] = $(this).val();
});

console.log(vals);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input id="txtYear_1" value="1">
<input id="txtYear_2" value="2">
<input id="txtYear_3" value="3">
<input id="txtYear_4" value="4">
<input id="txtYear_5" value="5">
<input id="txtYear_6" value="6">
<input id="txtYear_7" value="7">

答案 1 :(得分:2)

$.fn.val返回找到的元素集合中第一个元素的值。如果您想要一组值,只需使用$.fn.map + $.fn.get

var values = $("[id^='txtYear_']").map(function() {
  return this.value
}).get()

注意:.get()是必要的,因为$ .fn.map不会返回一个数组,而是一个新的jQuery集合。

要检查所有值是否为空(不是""),您可以在Array.prototype.every的帮助下执行以下操作:

var allFilled = values.every(function(value) {
  return value.trim()
})

如果您不需要辅助values数组,则可以更简单地执行此操作:

var allFilled = $("[id^='txtYear_']").get().every(function(el) {
  return el.value.trim()
}) // => true/false

答案 2 :(得分:1)

为什么只有第一个输入?

请参阅此链接:http://api.jquery.com/val/

jQuery文档说了val()方法:

Get the current value of the first element in the set of matched elements or set the value of every matched element.

如何获取所有输入元素的值

请注意,jQuery选择器始终返回一个对象,该对象包含数组属性中的匹配元素。 但您可以通过[]运算符直接访问所有匹配的元素

$("[id^='txtYear_']")[0]

$("[id^='txtYear_']")[1]

...

$("[id^='txtYear_']")[n]