Узнайте, проверен ли переключатель с помощью JQuery?


584

Я могу установить переключатель в положение флажка, но я хочу настроить своего рода «слушатель», который активируется при установке определенного переключателя.

Взять, к примеру, следующий код:

$("#element").click(function()
{ 
    $('#radio_button').attr("checked", "checked");
});

он добавляет проверенный атрибут, и все хорошо, но как мне добавить оповещение? Например, что появляется, когда переключатель отмечен без помощи функции щелчка?



1
Связанный Monitoring when a radio button is unchecked stackoverflow.com/questions/5824639/…
Adrien Be

Ответы:


1082
$('#element').click(function() {
   if($('#radio_button').is(':checked')) { alert("it's checked"); }
});

Бинго! спасибо Дэвид Должен ли я вызвать действие (щелкнуть и т. Д.), Чтобы показать предупреждение? Есть ли способ сделать это без нажатия?
Кит Донеган

3
Это не решает проблему "без помощи функции щелчка", не так ли?
Знаркус

5
@Znarkus: OP кажется довольным. Вы бы поспорили, что вы сами используете ('#radio_button').clickбез click?
Дэвид Хедлунд

3
@David Вторая строка должна быть if ($('#radio_button').is(':checked'))) { alert("it's checked"); }- вы забыли знак jQuery $, а затем нужно обернуть все это в еще несколько скобок.
Зуаллауз

2
@zua: ты прав! у него даже была синтаксическая ошибка, как это было раньше (непревзойденные скобки). исправлено
Дэвид Хедлунд

154

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

$(document).ready(function(){
  $('#submit_button').click(function() {
    if (!$("input[name='name']:checked").val()) {
       alert('Nothing is checked!');
        return false;
    }
    else {
      alert('One of the radio buttons is checked!');
    }
  });
});

Источник

jQuery API Ref


Это не сработало для меня. Если я предупреждаю ($ ("input [@ name = 'shipping_method']: флажок"). Val ()); он по-прежнему дает мне значение, даже если переключатель не выбран.
AndrewC

1
Примечание. Если у вас есть несколько форм с группами переключателей, использующих одно и то же имя, вы должны проверить только те формы, которые были отправлены. Один из вариантов сделать это - использовать метод find в форме: $('#myform').submit(function(event){ if (!$(this).find("input[name='name']:checked").val()) {
Бенджамин

41

Поскольку решение Парага выдало ошибку для меня, вот мое решение (объединяющее Дэвида Хедлунда и Парага):

if (!$("input[name='name']").is(':checked')) {
   alert('Nothing is checked!');
}
else {
   alert('One of the radio buttons is checked!');
}

Это работало нормально для меня!


32

Вы должны были бы связать событие click флажка, поскольку событие изменения не работает в IE.

$('#radio_button').click(function(){
    // if ($(this).is(':checked')) alert('is checked'); 
    alert('check-checky-check was changed');
});

Теперь, когда вы программно изменяете состояние, вы должны также вызвать это событие:

$('#radio_button').attr("checked", "checked");
$('#radio_button').click();

18

// Проверка через класс

if($("input:radio[class='className']").is(":checked")) {
     //write your code         
}

// Проверка по имени

if($("input:radio[name='Name']").is(":checked")) {
         //write your code         
}

// Проверяем данные

if($("input:radio[data-name='value']").is(":checked")) {
         //write your code         
}

10

Другой способ - использовать (jQuery> = 1.6) :prop

$("input[type=radio]").click(function () {
    if($(this).prop("checked")) { alert("checked!"); }
});

На самом деле .prop()гораздо быстрее, и просто проще набрать.
23

10

Решение будет простым, поскольку вам просто нужны «слушатели», когда установлен определенный переключатель. Сделай это :-

if($('#yourRadioButtonId').is(':checked')){ 
// Do your listener's stuff here. 
}

6

Если вы не хотите использовать функцию щелчка, используйте функцию изменения Jquery

$('#radio_button :checked').live('change',function(){
alert('Something is checked.');
});

Это должен быть ответ, который вы ищете. если вы используете версию Jquery выше 1.9.1, попробуйте использовать как устаревшую функцию.


6

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

 var user_cat = $("input[name='user_cat']:checked").val();

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


Самый полезный ответ
amal50


3

динамически генерируемая кнопка-радио Проверка значения радио

$("input:radio[name=radiobuttonname:checked").val();

На смене динамического переключателя

$('input[name^="radioname"]').change(function () {if (this.value == 2) { }else{}});

3

$ ('. radio-button-class-name'). is ('флажок') не работал для меня, но следующий код работал хорошо:

    if(typeof $('.radio-button-class-name:checked').val() !== 'undefined'){
     // radio button is checked
    }

1
Поскольку вы использовали его с классом вместо идентификатора, он бы возвратил список узлов вместо элемента. $('.radio-button-class-name').first().is(':checked')должен был работать.
Леви Йохансен



0

jQuery по-прежнему популярен, но если вы не хотите иметь никаких зависимостей, см. ниже. Короткая и понятная функция, чтобы узнать, установлен ли переключатель на ES-2015:

function getValueFromRadioButton( name ){
  return [...document.getElementsByName(name)]
         .reduce( (rez, btn) => (btn.checked ? btn.value : rez), null)
}

console.log( getValueFromRadioButton('payment') );
<div>  
  <input type="radio" name="payment" value="offline">
  <input type="radio" name="payment" value="online">
  <input type="radio" name="payment" value="part" checked>
  <input type="radio" name="payment" value="free">
</div>


-3
$("#radio_1").prop("checked", true);

Для версий jQuery до 1.6 используйте:

$("#radio_1").attr('checked', 'checked');

2
Это устанавливает значение checkedсвойства, а не запрашивает его.
23
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.