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

328

У меня есть 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(){});

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

Prashant
источник
5
вам не нужно строго указывать атрибут 'for', если поля включены между соответствующими тегами 'label'
Lucius
2
jQuery 1.8 и выше меняет это .... Я добавил ответ ниже, объясняя.
Кевин Лабранш,
3
Ответ A1rPun самый лучший: однострочник без jQuery!
Руди
1
Использовал переключатель для поддержания состояния в моем приложении js. Отладка в течение хорошего часа перед проверкой этой темы. Проверьте это
Prasanth
На простом JS:document.querySelectorAll("input:radio[name=theme]").forEach(function() { this.onclick=function() { var value = this.value; }; });
mplungjan

Ответы:

339

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

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

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

Паоло Бергантино
источник
4
@gargantaun - если вы нажмете переключатель, что с ним будет?
Паоло Бергантино
11
Хорошая точка зрения. Хотя это все еще не «Как получить выбранное значение радиокнопки, используя его имя в jQuery?». Это «Как получить выбранное значение радиокнопки при нажатии на него с помощью jQuery?». Небольшая разница, но немного сбившая меня с толку.
gargantuan
1
По вопросу этот ответ правильный. в глобальном масштабе мы идем для ответа Клейтона.
Криш
8
Начиная с использования jQuery 1.8 [type='radio']вместо :radioэтого, jQuery может воспользоваться преимуществами повышения производительности, обеспечиваемыми собственным querySelectorAll()методом DOM .
Адам
2
@PaoloBergantino - правильный ответ на 100%, так как он возвращает значение после нажатия нужной радиокнопки. @ Clayton Rabenda ответ не дает этого.
Азам Альви,
185

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

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

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

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

jeff.mitchel
источник
3
Основа понимаешь, как я ЧИТАЮ вопрос, это был ответ, который мне был нужен. : проверил, что я пропустил в моем уравнении. Спасибо.
HPWD
9
Начиная с использования jQuery 1.8 [type='radio']вместо :radioэтого, jQuery может воспользоваться преимуществами повышения производительности, обеспечиваемыми собственным querySelectorAll()методом DOM .
Адам
Я дал пробел после двоеточия и до "проверил" по ошибке. Поэтому, пожалуйста, убедитесь, что места нет.
Курящая обезьяна
Полезный ответ для тех, кто не хочет получать значение из обработчика события щелчка. В противном случае вы должны использовать, :checkedчтобы найти, какая кнопка отмечена, например, с помощью обработчика события отправки формы, где thisключевое слово не отображается на нажатую кнопку.
Че-Азех
155
$('input:radio[name=theme]:checked').val();
сойка
источник
Я просто продолжил $("input[name=theme]:checked").val();(оставив :radioчасть вне, и, кажется, она отлично работает в IE, FF, Safari и Chrome. Мне пришлось работать с jQ v 1.3 ... Конечно, это означает, что есть только один элемент с именем 'theme'
morespace54
2
Это лучший ответ IMO, он говорит: «Принесите мне значение ПРОВЕРЕНО радио с этим именем». Нет необходимости в событиях и т. Д.
ProVega
39

по-другому

$('input:radio[name=theme]').filter(":checked").val()
h0mayun
источник
1
Это полезно, если вы заинтересованы в получении значения +1
swapnesh
Это хорошо, потому что вы можете использовать переменную для хранения переключателей, например, $themeRadios = $('input:radio[name=theme'])чтобы установить любые обработчики событий, а затем получить значение с помощью фильтра, например $themeRadios.filter(":checked").val().
Джошуа Пинтер
Я люблю это решение.
Авель
20

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

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

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

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

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

Мухаммед Аднан
источник
хм .. разве я не исправил формат вашего кода в вашем последнем ответе? Пожалуйста, позаботьтесь об этом сами :-)
kleopatra
13

Я нашел этот вопрос, когда я исследовал ошибку после того, как я обновил с 1.7.2 jQuery до 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 и о билете, специфичном для этого изменения, а также понять, почему на странице выбора радио: в разделе «Дополнительная информация».

Кевин ЛаБранш
источник
5
: флажок не устарел. Таким образом, вы можете использовать$("input[type='radio'][name='theme']:checked")
Адам
12

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

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

jsfiddle

Для обзора производительности текущих ответов проверьте здесь

A1rPun
источник
1
Спасибо за этот ответ. Потому что я не смог получить принятый ответ для работы в любой форме.
Крис Холмс
9

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

оповещения ($ ( "вход: радио: проверено".) Вал ());
lhoess
источник
6

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

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

Вот URL скрипки

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

Мухаммед Салман
источник
4
<input type="radio" name="ans3" value="help"> 
<input type="radio" name="ans3" value="help1">
<input type="radio" name="ans3" value="help2">

<input type="radio" name="ans2" value="test"> 
<input type="radio" name="ans2" value="test1">
<input type="radio" name="ans2" value="test2">

<script type="text/javascript">
  var ans3 = jq("input[name='ans3']:checked").val()
  var ans2 = jq("input[name='ans2']:checked").val()
</script>
kartheek
источник
4

Если вы хотите значение true / false, используйте это:

  $("input:radio[name=theme]").is(":checked")
gls123
источник
3

Может быть как то так?

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

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

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

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

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

Ура!

Ahmed
источник
2

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

$('.radio_check:checked').val()
Даниэль Фернандес
источник
1

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

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 () {
        если ($ (это) .а ( ': проверено'))
        оповещения ($ (это) .val ());
    });

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

Рави М
источник
0
$('input:radio[name=theme]').bind(
  'click',
  function(){
    $(this).val();
});
голубоватый
источник
0

Вы можете заметить, что использование селектора класса для получения значения элементов 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();
});
AaA
источник