Как в jQuery выбрать элемент по его атрибуту имени?

У меня есть 3 переключателя на моей веб-странице, как показано ниже:

<label for="theme-grey">
  <input type="radio" id="theme-grey" name="theme" value="grey" />Grey</label>
<label for="theme-pink">
  <input type="radio" id="theme-pink" name="theme" value="pink" />Pink</label>
<label for="theme-green">
  <input type="radio" id="theme-green" name="theme" value="green" />Green</label>

В jQuery я хочу получить значение выбранного переключателя при нажатии любого из этих трех. В jQuery есть селекторы id (#) и class (.), Но что, если я хочу найти переключатель по его имени, как показано ниже?

$("<radiobutton name attribute>").click(function(){});

Подскажите пожалуйста как решить эту проблему.


person Prashant    schedule 12.06.2009    source источник
comment
вам не нужно строго указывать атрибут 'for', если поля включены между соответствующими тегами 'label'.   -  person Lucius    schedule 18.09.2012
comment
jQuery 1.8 и выше меняет это .... Я добавил ответ ниже, объясняя.   -  person Kevin LaBranche    schedule 03.10.2012
comment
Лучше всего ответ A1rPun: однострочник, отличный от jQuery!   -  person Rudey    schedule 30.09.2014
comment
Использовал переключатель для поддержания состояния в моем приложении js. Отлаживалась в течение часа, прежде чем проверять эту ветку. Оцените это   -  person Prasanth    schedule 05.06.2015
comment
На простом JS: document.querySelectorAll("input:radio[name=theme]").forEach(function() { this.onclick=function() { var value = this.value; }; });   -  person mplungjan    schedule 18.04.2018


Ответы (16)


Это должно сработать, все это находится в документации, в которой есть очень похожий пример. к этому:

$("input[type='radio'][name='theme']").click(function() {
    var value = $(this).val();
});

Я также должен отметить, что в этом фрагменте есть несколько одинаковых идентификаторов. Это недопустимый HTML. Используйте классы для группировки набора элементов, а не идентификаторов, поскольку они должны быть уникальными.

person Paolo Bergantino    schedule 12.06.2009
comment
@gargantaun - что с этим произойдет, если щелкнуть радиокнопку? - person Paolo Bergantino; 02.03.2012
comment
Хорошая точка зрения. Хотя это все еще не так. Как получить выбранное значение радиокнопки, используя его имя в jQuery ?. Как получить выбранное значение радиокнопки при нажатии на нее с помощью jQuery ?. Небольшая разница, но она меня немного сбила с толку. - person gargantuan; 02.03.2012
comment
По вопросу ответ правильный. с глобальной точки зрения мы идем за ответом Клейтона. - person Krish; 27.05.2012
comment
Это был не тот ответ, который я искал, потому что он по-прежнему принимает значение первого переключателя в списке. Ответ ниже - правильный ответ. - person Adam Levitt; 16.07.2012
comment
@AdamLevitt: Вы не понимаете вопрос и / или ответ, если считаете, что этот ответ неверен. - person Paolo Bergantino; 16.07.2012
comment
Начиная с jQuery 1.8 используйте [type='radio'] вместо :radio, таким образом jQuery может воспользоваться преимуществом повышения производительности, обеспечиваемого собственным методом DOM querySelectorAll(). - person Adam; 28.10.2012
comment
Ответ @PaoloBergantino на 100% правильный, потому что он возвращает значение после щелчка желаемой радиокнопки. Ответ @PaoloBergantino не дает этого. - person Azam Alvi; 04.08.2013

Чтобы определить, какой переключатель установлен, попробуйте следующее:

$('input:radio[name=theme]').click(function() {
  var val = $('input:radio[name=theme]:checked').val();
});

Событие будет зафиксировано для всех радиокнопок в группе, а значение выбранной кнопки будет помещено в val.

Обновление: после публикации я решил, что приведенный выше ответ Паоло лучше, поскольку он использует на один обход DOM меньше. Я оставляю этот ответ в силе, поскольку он показывает, как получить выбранный элемент кроссбраузерным способом.

person jeff.mitchel    schedule 12.06.2009
comment
Как я ЧИТАил вопрос, это был тот ответ, который мне был нужен. : проверено - это то, что мне не хватало в моем уравнении. Спасибо. - person HPWD; 25.10.2012
comment
Начиная с jQuery 1.8 используйте [type='radio'] вместо :radio, таким образом jQuery может воспользоваться преимуществом повышения производительности, обеспечиваемого собственным методом DOM querySelectorAll(). - person Adam; 28.10.2012
comment
Я поставил пробел после двоеточия и перед ошибкой проверил. Поэтому убедитесь, что на нем нет места. - person Smoking monkey; 26.09.2014
comment
Полезный ответ для тех, кто не хочет получать значение от обработчика события щелчка. В противном случае вы должны использовать :checked, чтобы найти, какая кнопка отмечена, например, с помощью обработчика события отправки формы, где ключевое слово this не сопоставляется с нажатой кнопкой. - person Cedric Ipkiss; 04.01.2015

другой путь

$('input:radio[name=theme]').filter(":checked").val()
person h0mayun    schedule 30.11.2013
comment
Это полезно, если вы хотите получить значение +1. - person swapnesh; 27.01.2014
comment
Это надежно, потому что вы можете использовать переменную для сохранения переключателей, например $themeRadios = $('input:radio[name=theme']), чтобы установить любые обработчики событий, а затем получить значение с помощью фильтра, например $themeRadios.filter(":checked").val(). - person Joshua Pinter; 29.01.2015
comment
Мне нравится это решение. - person Abel; 28.02.2015

Это отлично работает для меня. Например, у вас есть две радиокнопки с одинаковым «именем», и вы просто хотите получить значение отмеченного флажка. Вы можете попробовать это.

$valueOfTheCheckedRadio = $('[name=radioName]:checked').val();
person wdonayredroid    schedule 07.09.2012
comment
Причина, по которой этот ответ лучше, чем принятый в настоящее время ответ, за который проголосовали более 230+, заключается в том, что этот ответ также учитывает, когда пользователь взаимодействует с переключателем с помощью клавиатуры. - person gmeben; 14.04.2015

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

jQuery("input:radio[name=theme]:checked").val();

Спасибо Аднан

person Muhammad Adnan    schedule 06.03.2013
comment
хм .. разве я не исправлял форматирование вашего кода в вашем последнем ответе? Пожалуйста, позаботьтесь об этом сами :-) - person kleopatra; 06.03.2013

Я нашел этот вопрос, когда исследовал ошибку после обновления jQuery с 1.7.2 до 1.8.2. Я добавляю свой ответ, потому что в jQuery 1.8 и выше произошло изменение, которое меняет способ ответа на этот вопрос сейчас.

В jQuery 1.8 они устарели псевдоселекторами например: радио,: флажок,: текст.

Чтобы сделать это сейчас, просто замените :radio на [type=radio].

Итак, ваш ответ теперь будет для всех версий jQuery 1.8 и выше:

$("input[type=radio][name=theme]").click(function() { 
    var value = $(this).val(); 
}); 

Вы можете прочитать об изменении в файле readme версии 1.8 и билет, относящийся к этому изменению, а также объясните, почему в : страница выбора радио в разделе" Дополнительная информация ".

person Kevin LaBranche    schedule 03.10.2012
comment
: checked не устарел. Таким образом, вы можете использовать $("input[type='radio'][name='theme']:checked") - person Adam; 28.10.2012

Для тех, кто не хочет включать библиотеку, чтобы делать что-то действительно простое:

document.querySelector('[name="theme"]:checked').value;

jsfiddle

Обзор эффективности текущих ответов можно найти здесь

person A1rPun    schedule 30.09.2014
comment
Спасибо за этот ответ. Потому что мне не удалось получить принятый ответ на работу ни в какой форме. - person Chris Holmes; 26.04.2017

Если вы хотите узнать значение выбранного по умолчанию переключателя перед событием клика, попробуйте следующее:

alert($("input:radio:checked").val());
person lhoess    schedule 24.06.2011

Вы можете использовать функцию фильтра, если у вас есть более одной радиогруппы на странице, как показано ниже.

$('input[type=radio]').change(function(){
    var value = $(this).filter(':checked' ).val();
    alert(value);
});

Вот URL скрипки

http://jsfiddle.net/h6ye7/67/

person Muhammad Salman    schedule 10.03.2015

Если вам нужно значение истина / ложь, используйте это:

  $("input:radio[name=theme]").is(":checked")
person gls123    schedule 05.08.2013

Может, что-то вроде этого?

$("input:radio[name=theme]").click(function() { 
 ...
}); 

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

person tschaible    schedule 12.06.2009
comment
@ Недействителен с jQuery 1.3 (даже не рекомендуется). blog.jquery.com/2009/01 / 05 / help-test-jquery-13-beta-2 Старая версия, XPath, селекторы атрибутов стиля: [@ attr = value]. Они уже давно устарели, и мы наконец-то их удаляем. Чтобы исправить это, просто удалите @! - person racerror; 13.06.2009

Если у вас есть несколько групп переключателей на одной странице, вы также можете попробовать это, чтобы получить значение переключателя:

$("input:radio[type=radio]").click(function() {
    var value = $(this).val();
    alert(value);
});

Ваше здоровье!

person ahmed    schedule 14.01.2015

также можно использовать класс CSS для определения диапазона переключателей, а затем использовать следующее для определения значения

$('.radio_check:checked').val()
person Daniel Fernandes    schedule 14.06.2012

Это сработало для меня ..

HTML:

<input type="radio" class="radioClass" name="radioName" value="1" />Test<br/>
<input type="radio" class="radioClass" name="radioName" value="2" />Practice<br/>
<input type="radio" class="radioClass" name="radioName" value="3" />Both<br/>

JQuery:


    $(".radioClass").each(function() {
        if($(this).is(':checked'))
        alert($(this).val());
    });

Надеюсь, это поможет..

person Ravi M    schedule 26.02.2013

Вы могли заметить, что использование селектора классов для получения значения ASP.NET RadioButton элементов управления всегда пусто, и вот почему.

Вы создаете RadioButton элемент управления в ASP.NET, как показано ниже:

<asp:RadioButton runat="server" ID="rbSingle" GroupName="Type" CssClass="radios" Text="Single" />
<asp:RadioButton runat="server" ID="rbDouble" GroupName="Type" CssClass="radios" Text="Double" />
<asp:RadioButton runat="server" ID="rbTriple" GroupName="Type" CssClass="radios" Text="Triple" />

И ASP.NET отображает следующий HTML-код для вашего RadioButton

<span class="radios"><input id="Content_rbSingle" type="radio" name="ctl00$Content$Type" value="rbSingle" /><label for="Content_rbSingle">Single</label></span>
<span class="radios"><input id="Content_rbDouble" type="radio" name="ctl00$Content$Type" value="rbDouble" /><label for="Content_rbDouble">Double</label></span>
<span class="radios"><input id="Content_rbTriple" type="radio" name="ctl00$Content$Type" value="rbTriple" /><label for="Content_rbTriple">Triple</label></span>

Для ASP.NET мы не хотим использовать RadioButton имя или идентификатор элемента управления, потому что они могут измениться по любой причине не по вине пользователя (изменение имени контейнера, имени формы, имени элемента управления и т. Д.), Как вы можете видеть в коде выше.

Единственный возможный способ получить значение RadioButton с помощью jQuery - использовать класс css, как указано в этом ответе на полностью несвязанный вопрос как следующий

$('span.radios input:radio').click(function() {
    var value = $(this).val();
});
person AaA    schedule 19.06.2015

person    schedule
comment
Я просто продолжил с $("input[name=theme]:checked").val(); (оставив часть :radio, и, похоже, она отлично работает в IE, FF, Safari и Chrome. Мне пришлось работать с jQ v 1.3 ... Конечно, это означает, что есть только один элемент с именем ' тема' - person morespace54; 14.02.2014
comment
Это лучший ответ ИМО, он говорит, дайте мне значение ПРОВЕРЕННОГО радио с ЭТОМ именем. Нет необходимости в мероприятиях и т. Д. - person ProVega; 20.03.2015