2015-02-24 63 views
0

上我有多個單選按鈕組,像這樣:查找每個無線電組

<input type="radio" name="sex" value="male"> 
<input type="radio" name="sex" value="female"> 

<input type="radio" name="length" value="tall"> 
<input type="radio" name="length" value="short"> 

等等..

我的目標是找出那些頁面上的無線電組所有集合。所以在這種情況下,它會返回sex, length

到目前爲止,我能夠得到所有的輸入,但我不知道從哪裏去。

var radio_groups = []; 
$("input[type=radio]").each(function(e){ 
    //get the name 
    var name = this.attr('name'); 
}); 
+0

您已獲取輸入組的名稱。我很困惑;你想下一步該做什麼? – 2015-02-24 19:15:56

+0

@DavidBrierton我的目標是找出頁面上的所有廣播組。所以在這種情況下,它會返回'性別,長度' – bryan 2015-02-24 19:19:33

回答

1

如果你想要的是具有名字作爲鍵可以做一個對象:

var radios ={}; 
$("input[type=radio]").each(function(e){ 
    radios[this.name] = true; 
}); 

console.dir(radios); 
/* if want to convert to array */ 
var radioArray= Object.keys(radios); 

DEMO

+0

謝謝,這讓它變得簡單。重寫一個組名或檢查它是否存在更重要嗎? – bryan 2015-02-24 19:33:31

+0

令人懷疑有任何顯着差異 – charlietfl 2015-02-24 19:34:11

+0

請注意,如果您希望在IE8或更低版本上運行,您需要自行實施'keys()'或將其替換爲'for'循環。 'Object.keys()'直到IE9才顯示出來。 – 2015-02-24 19:46:50

0

使用indexOf()來檢查您是否已經看到了名字:

var radio_groups = []; 
 

 
$("input[type=radio]").each(function(e) { 
 
    var name = $(this).attr('name'); 
 

 
    if (radio_groups.indexOf(name) < 0) 
 
    radio_groups.push(name); 
 
}); 
 

 
console.log(radio_groups);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> 
 
<input type="radio" name="sex" value="male"> 
 
<input type="radio" name="sex" value="female"> 
 

 
<input type="radio" name="length" value="tall"> 
 
<input type="radio" name="length" value="short">

0

你的選擇器選擇所有輸入單元枝條name屬性開始組,它不篩選出獨特的名稱

如果只想打印不同的組名稱,則

var group = {}; 
$('input[name=*][type="radio"]').each(function (index) { 
    var name = this.name; 
    var elemValue = $(this).val(); 
    if (!group[name]) { 
     group[name] = true; 
     console.log(elemValue); 
    } 
}); 
+1

浪費DOM搜索從'this'獲取名稱,然後使用一個jQuery選擇器,'$(this).val()'有什麼問題? – charlietfl 2015-02-24 19:26:02

+0

我犯了一個錯誤,謝謝... – void 2015-02-24 19:27:14

0

如果你想獲得的複選框中的值,可能需要考慮將無線電包裹在表單標籤中。像這樣:

<form id="f1"> 
    <input type="radio" name="sex" value="male"> 
    <input type="radio" name="sex" value="female"> 
    <input type="radio" name="length" value="tall"> 
    <input type="radio" name="length" value="short"> 
</form> 

然後,你可以爲每個像這樣獲得的價值:

var lenghtVal = document.forms[0].length.value; 
var sexVal = document.forms[0].sex.value; 

根據您的具體情況更換形式數組的索引。

0

試試這個:

http://jsfiddle.net/76bhs444/1/

命中F12和查看在控制檯中。這應該是你想要的。

// get all radio names 
    var radio_groups = $("input[type=radio]").map(function(e){ 
    return $(this).attr('name'); 
    }).get(); 
    console.log(radio_groups); 
// filter duplicates 
    radio_groups = $.grep(radio_groups, function(value, index) { 
    return $.inArray(value, radio_groups) === index; 
    }); 
    console.log(radio_groups);