2013-08-27 65 views
0

指定單選按鈕我有這樣的HTML:我如何選擇每個組

<fieldset class="target-radios"> 
     <legend>Date Range</legend> 
     <div> 
      <input id="dateUnspecified" type="radio" name="muScheduleDateRange" value="0" selected-item="0"> 
     </div> 
     <div> 
      <input id="dateAll" type="radio" name="muScheduleDateRange" value="1" selected-item="0"> 
     </div> 
     <div class="from-to"> 
      <input type="radio" id="dateFromTo" name="muScheduleDateRange" value="2" selected-item="0"> 
     </div> 
</fieldset> 

如何選擇指定的單選按鈕(選擇項),通過各組循環?理想循環應該每組只能工作一次。

嘗試過這種方法,但通過各組不起作用&循環多次:

$('#targeting input:radio').each(function() { 
    var name = $(this).attr('name'), 
    selected = $(this).attr('selected-item'); 

    if(typeof selected !== 'undefined') { 
     $('input[name='+ name +']:nth-child('+ selected +')').attr('checked', true); 
    } 
}); 
+0

你能解釋一下你的意思嗎? – Adil

+0

你認爲如果嘗試成功,你會做些什麼? –

回答

1

你必須記住元素是0索引,所以減1。

$('input[type=radio]').each(function() { 
    var name = $(this).attr('name'), 
     aselected = parseInt($(this).attr('selected-item'), 10) - 1; 
    if (typeof aselected !== 'undefined') { 
     $('input[type="radio"][name="' + name + '"]').eq(aselected).prop('checked', true); 
    } 
}); 

注:顯示沒有目標,但要補充一點變化:

$('#targeting').find('input[type=radio]').each... 

編輯回覆:更新標記:去除-1的aselector指數計算

$('.target-radios').find('input[type=radio]').each(function() { 
    var name = $(this).attr('name'), 
     aselected = parseInt($(this).attr('selected-item'), 10); 
    var me = 'input[type="radio"][name="' + name + '"]'; 
    if (typeof aselected !== 'undefined') { 
     $(me).eq(aselected).prop('checked', true); 
    } 
}); 
+0

感謝馬克,它選擇錯誤(第三)按鈕與更新的標記,任何線索? – RuntimeException

+0

@RuntimeException - 我添加了一個示例,刪除了-1。 –

1

我不太清楚你的意思,但你可以嘗試一些與此類似,

$('div').each(function() { 
    // Determine the selected item id 
    var selectedItemId = $(this).eq(0).attr('selected-item'); 

    // Check it 
    $(this).find('input[value="' + selectedItemId + '"]').prop('checked', true); 
}); 

此外,你可以給你的div相同的類如「」,所以你可以使用$('.group').each()來代替。

+0

我想選擇第1組中的第2個單選按鈕和第2箇中的第3個單選按鈕。簡單! – RuntimeException

+0

@RuntimeException我想我只是明白你想要什麼。我更新了我的代碼,檢查它是否適用於您。 – federicot

1

儘量不要組成自己的屬性。我取代data-selected-itemselected-item

$('div').each(function() { 
    $('input', this).eq($(this).find('input').data('selected-item') - 1).prop('checked', true); 
}); 

jsFiddle example

更新:

您可以嘗試根據您的變化這種變化:

$('input').each(function() { 
    if ($(this).data('selected-item') == (parseInt($(this).val(), 10))) $(this).prop('checked', true); 
}); 

jsFiddle example

+0

偉大的工程,但我有我的html結構的問題,你可以讓這個工作沒有div? – RuntimeException

+0

答覆已更新。 – j08691

+0

有什麼辦法可以使它與當前結構一起工作?感謝幫助。 – RuntimeException

1

工作DEMO

試試這個,我已經加了targeting DIV,

$('#targeting div').each(function() { 
    var name = $(this).children(0).attr('name'); 
    var selected = $(this).children(0).attr('selected-item'); 
    if(typeof selected !== 'undefined') { 
     $('input[name='+ name +']:nth-child('+ selected +')').attr('checked', true); 
    } 
}); 

希望這會有所幫助,謝謝

+0

你能否讓它使用更新的標記? – RuntimeException

+0

其可能。我會制定並給你 – SarathSprakash

+0

我已經添加了另一個答案,檢查出來,我認爲它符合你的要求 – SarathSprakash

0

DEMO

這將讓具有鮮明'name'屬性的電臺,所以循環將被執行取決於不同組的數量,即'name'屬性

var divs = $('input').map(function() { 
    return this.name 
}).get(); 
var uniqueName = $.unique(divs); 
for(i=0 ; i<uniqueName.length;i++) 
{ 
var selected = $("input[name="+uniqueName[i]+"").attr('selected-item'); 
$('input[name='+ uniqueName[i] +']').eq(selected).attr('checked', true); 
} 

希望這會有所幫助,謝謝

+0

我想這符合你的要求... – SarathSprakash