2014-07-03 63 views
0

可以說我有一組輸入:獲取輸入選定值就像是一個形式

<input type=checkbox value=1 checked/> 
<input type=checkbox value=2 checked/> 
<input type=checkbox value=3 checked/> 
<input type=checkbox value=4 checked/> 

$("input[type=checkbox]").is(":checked").val();無法正常工作,甚至$("input[type=checkbox]").val();只返回第一個。我知道我可以使用$.each(),但我可能正在尋找更有效的方法。我希望它返回就像一個正常的形式類型值優先返回,如下所示:1,2,3,4

想法?

+0

你不能在同一時間得到所有複選框的值沒有超過他們迭代不管你使用的每個,地圖,或簡單的循環。一個可能的選擇可能是從空陣列和未選中的複選框開始,在每個複選框上附加點擊/更改事件並添加/刪除選中/未選中的值,但是它更復雜。只需使用each,map,loop .. :) –

+0

'.is()'返回一個布爾值,而不是一個jQuery對象。你不能對它應用jQuery方法。 – Barmar

回答

2

嘗試使用與.get()一起.map()收集在數組中選中的複選框值,

var values = $(':checkbox:checked').map(function(){ 
    return this.value; 
}).get(); // 1,2,3,4 But the values would be in an array 

如果你希望這些價值觀爲加入字符串,然後做,

var result = values.join(); //"1,2,3,4" 
+0

不錯,工作。非常感謝 –

+0

@ZeeTee很高興爲您提供幫助。 –

0

您可以使用.map()

描述:通過函數傳遞當前匹配集合中的每個元素,產生一個包含返回值的新jQuery對象。

由於返回值是一個jQuery對象,它包含一個數組,因此在結果上調用.get()以使用基本數組非常常見。

使用

var arr = $(':checkbox:checked').map(function() { 
    return this.value; // $(this).val() 
}).get(); //Result in array 
var values = arr.join(); in string 
0

嗯,我不使用jQuery友好,所以我也沒有jQuery的解決方案(讀無jQuery的一樣快)。我的解決方案稍長一些,但速度非常快。 jsperf比對手的解決方案快29倍。 http://jsperf.com/map-vs-cycle 這是jQuery地圖方法的開銷成本。

這裏是代碼:

var chckbxs = document.querySelectorAll("input[type=checkbox]"), // NodeList with these checkboxes 
    num = chckbxs.length, 
    values = [], i 
for(i = 0; i < num; i++) // save values into array 
    values[i] = chckbxs[i].value; 
values = values.toString() // to string data