З'ясуйте, чи перевірено перемикач за допомогою 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
Це не вирішує "без допомоги функції клацання", чи не так?
Znarkus

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

3
@David Другий рядок повинен бути if ($('#radio_button').is(':checked'))) { alert("it's checked"); }- ви забули знак jQuery $, а потім потрібно все це загорнути в ще дужки.
zuallauz

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
Примітка. Якщо у вас є кілька форм з групами радіо кнопок, що використовують одне ім’я, вам потрібно обов’язково перевірити лише ті форми, які подаються. Один з варіантів зробити це - скористатися методом знаходження на формі: $('#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

Вам доведеться прив’язати подію натискання прапорця, оскільки подія зміни не працює в 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()набагато швидше і просто простіше набрати.
Марк.2377

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властивості, а не запитувати його.
Марк.2377,
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.