2017-08-13 52 views
2

考虑:jQuery的多个选择与.VAL()

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

这是为什么只给我的第一个输入框一个ID为“txtYear_”盯着输入的值?我想获得所有以“txtYear_”开头的输入框的值。

+0

'$(“[id^='txtYear _']”)'会返回一组元素,如果您有多个元素匹配它。这意味着你将不得不遍历整个集合:) – Terry

回答

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 
+0

我想确保所有这些值不等于“”(不是空的)。我如何转换这个以返回“真”或“假”?谢谢! – Emilio

+1

@Emilio查看更新的答案。 – dfsq

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

那么,为什么突然笨拙地使用冗余阵列,并推动时,你可以使用$ .fn.map? – dfsq

+0

是的,改变了错误的部分@dfsq – baao

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]