2017-08-13 59 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]