2013-08-27 2 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... 

EDIT Re: обновленные разметки: снимите -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

Спасибо Марк, он выбрал неправильную (3-ей) кнопку с обновленной разметкой, любой ключ? – 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); 
}); 

Кроме того, вы можете дать вашим divs тот же класс, что и «group», поэтому вы можете использовать $('.group').each().

+0

Я хочу выбрать вторую радиокнопку в группах 1 и 3 в 2-й. Просто! – RuntimeException

+0

@RuntimeException Я думаю, что я просто понял, чего вы хотите. Я обновил свой код, проверьте, работает ли он на вас. – federicot

1

Постарайтесь не составлять свои собственные атрибуты. Я заменял data-selected-item для selected-item

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

jsFiddle example

Update:

Вы можете попробовать этот вариант на основе ваших изменений:

$('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 ДИВ,

$('#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

Смежные вопросы