Динамически получить имя группы переключателей с помощью jQuery

Я хотел бы спросить, есть ли способ динамически получить имя группы переключателей, т.е. оптимизировать следующие две функции щелчка в одну, имея [name=some_variable].

Я старался:

$('input:radio').click(function() {
    alert($('input:radio:checked').attr('name'));
});

но он всегда возвращает мне имя первой нажатой группы переключателей.

$(document).ready(function(){
    $('input:radio[name=q1]').click(function() {
        var ans1 = $('input[name=q1]:radio:checked').val();
        getUserAnswer(1, ans1);
    });

    $('input:radio[name=q2]').click(function() {
        var ans2 = $('input[name=q2]:radio:checked').val();                 
        getUserAnswer(2, ans2);
    });                             
});
<body>
    <ol>
        <li><p>Q1<br />
            <input type="radio" id="q1A" name="q1" value="A" />Q1 A<br />
            <input type="radio" id="q1B" name="q1" value="B" />Q1 B<br />
            <input type="radio" id="q1C" name="q1" value="C" />Q1 C<br />
            <input type="radio" id="q1D" name="q1" value="D" />Q1 D<br />
        </p></li>
        <li><p>Q2<br />
            <input type="radio" id="q2A" name="q2" value="A" />Q2 A<br />
            <input type="radio" id="q2B" name="q2" value="B" />Q2 B<br />
            <input type="radio" id="q2C" name="q2" value="C" />Q2 C<br />
            <input type="radio" id="q2D" name="q2" value="D" />Q2 D<br />           
        </p></li>
    </ol>
</body>

person gisc    schedule 07.04.2011    source источник


Ответы (2)


$('input:radio').click(function() { 
  console.log($(this).attr('name')); 
}); 

Вы выбираете новый набор элементов по щелчку, но вам нужен атрибут текущего элемента, поэтому вам нужно ссылаться на него с помощью «этого»

person Headshota    schedule 07.04.2011
comment
Спасибо большое! Обнаружено, что использование this.name также помогает. Спасибо! - person gisc; 07.04.2011

Что-то вроде следующего должно работать:

$('input').click(function() {
    var thisName = $(this).attr('name');
    var qNum = thisName.substring(1);
    var ans2 = $('input[name=' + thisName + ']:radio:checked').val();
    getUserAnswer(thisName, ans2);
});
person David says reinstate Monica    schedule 07.04.2011
comment
Если бы кто-то мог отформатировать код для меня, это было бы здорово; iPhone, кажется, в неловком настроении... =/ - person David says reinstate Monica; 07.04.2011
comment
Спасибо, Дэвид. К сожалению, форматирование кода появилось только в режиме предварительного просмотра. - person gisc; 07.04.2011
comment
Исправлено, я понятия не имею, почему это не работало раньше, но я просто удалил все пробелы и снова вставил их. - person Georg Schölly; 07.04.2011
comment
Спасибо, @Georg, я уверен, что по какой-то причине iPhone должен использовать какой-то нестандартный пробельный символ. Иногда... вздох. - person David says reinstate Monica; 07.04.2011