Як у jQuery я можу вибрати елемент за атрибутом імені?


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(){});

Скажіть, будь ласка, як вирішити цю проблему.


5
вам не потрібно строго вказувати атрибут "для", якщо поля містяться між відповідними тегами "label"
Луцій

2
jQuery 1.8 і вище змінює це .... Я додав відповідь нижче, пояснюючи.
Кевін ЛаБранш

3
Відповідь A1rPun найкраща: однокласник не jQuery!
Rudey

1
Використовував перемикач для підтримки стану в моєму додатку js. Налагоджено протягом години протягом перевірки цієї теми. Перевірте це
Прасант

На document.querySelectorAll("input:radio[name=theme]").forEach(function() { this.onclick=function() { var value = this.value; }; });
простоті

Відповіді:


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% правильна, оскільки вона повертає значення після натискання потрібної радіо кнопки. @ Клейтон Рабенда відповідь не дає цього.
Азам Алві

185

Щоб визначити, який перемикач встановлений, спробуйте:

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

Подія буде зафіксована для всіх радіо кнопок у групі, а значення вибраної кнопки буде розміщено у val.

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


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 ... Звичайно, це означає, що є лише один елемент з назвою "тема"
morespace54

2
Це найкраща відповідь ІМО, в якій сказано: "знайди мені значення ПРОВЕРЕНОГО радіо з ЦИМИм іменем". Немає потреби у подіях тощо
ProVega

39

Інший спосіб

$('input:radio[name=theme]').filter(":checked").val()

1
Цей варіант корисний, якщо вам цікаво схопити значення +1
swapnesh

Це твердо, тому що ви можете використовувати змінну для утримання радіо кнопок, наприклад, $themeRadios = $('input:radio[name=theme'])щоб встановити будь-які обробники подій, а потім отримати значення за допомогою фільтра, наприклад $themeRadios.filter(":checked").val().
Джошуа Пінтер

Я люблю це рішення.
Авель

20

Це чудово працює для мене. Наприклад, у вас є дві радіо кнопки з тим самим "ім'ям", і ви просто хотіли отримати значення перевіреної. Ви можете спробувати цей.

$valueOfTheCheckedRadio = $('[name=radioName]:checked').val();

Причина, що ця відповідь краща за прийняту на даний момент відповідь на 230+, полягає в тому, що ця відповідь також пояснюється, коли користувач взаємодіє з перемикачем за допомогою клавіатури.
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(); 
}); 

Про зміну ви можете прочитати на 1.8 readme та конкретному квитку для цієї зміни , а також зрозуміти, чому на сторінці : вибір радіо в розділі «Додаткова інформація».


5
: Позначено, чи не застаріло. Тож ви можете використовувати$("input[type='radio'][name='theme']:checked")
Адам,

12

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

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

jsfiddle

Огляд ефективності поточних відповідей дивіться тут


1
Дякую за цю відповідь. Тому що я не зміг отримати прийняту відповідь працювати в будь-якій формі.
Кріс Холмс

9

Якщо ви хочете дізнатись значення вибраної за замовчуванням радіо-кнопки перед подією натискання, спробуйте:

сигнал ($ ("вхід: радіо: перевірено"). val ());

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>

4

Якщо ви хочете отримати справжнє / хибне значення, використовуйте це:

  $("input:radio[name=theme]").is(":checked")

3

Щось подібне, можливо?

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

Коли ви натискаєте будь-яку перемикач, я вважаю, що вона в кінцевому підсумку буде обрана, тому це буде викликано вибраною перемикачем.


1
@ Недійсний на jQuery 1.3 (навіть застаріле до цього). blog.jquery.com/2009/01/05/help-test-jquery-13-beta-2 "Старий, XPath, вибір атрибутів стилю: [@ attr = значення]. Вони давно застаріли - і ми нарешті їх видаляємо. Щоб виправити це, просто видаліть @! "
гонщик

3

У вас на одній сторінці є кілька груп радіо кнопок, ви також можете спробувати це, щоб отримати значення перемикача:

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

Ура!


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"). кожен (функція () {
        if ($ (this) .is (': перевірено'))
        попередження ($ (це) .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();
});
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.