考虑:
$("[id^='txtYear_']").val();
为什么这只给了我在第一个输入框中输入的值,其ID与#34; txtYear _"?我想得到所有输入框的值,这些输入框的ID以" txtYear _"开头。
答案 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]