jQuery多个选择器与.val()

考虑:

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

为什么这只给了我在第一个输入框中输入的值,其中ID与“txtYear_”一起盯着? 我想获取ID为“txtYear_”的所有输入框的值。

$ .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 

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

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

为什么只有第一个输入?

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

关于val()方法的jQuery文档说:

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]