Dowiedz się, czy przycisk radiowy jest sprawdzany za pomocą JQuery?

584

Mogę ustawić przycisk opcji tak, aby sprawdził się dobrze, ale chcę zrobić coś w rodzaju „nasłuchiwania”, który aktywuje się po zaznaczeniu określonego przycisku opcji.

Weźmy na przykład następujący kod:

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

dodaje zaznaczony atrybut i wszystko jest w porządku, ale jak bym dodał dodanie alertu. Na przykład pojawia się, gdy przycisk opcji jest zaznaczony bez pomocy funkcji kliknięcia?

Keith Donegan
źródło
2
sprawdzany jest
Felix Kling
1
powiązane Monitoring when a radio button is unchecked stackoverflow.com/questions/5824639/…
Adrien Be

Odpowiedzi:

1082
$('#element').click(function() {
   if($('#radio_button').is(':checked')) { alert("it's checked"); }
});
David Hedlund
źródło
Bingo! dzięki David. Czy więc musiałbym wywołać akcję (kliknięcie itp.), Aby wyświetlić alert? Czy można to zrobić bez klikania?
Keith Donegan
3
To nie rozwiązuje problemu „bez pomocy funkcji kliknięcia”, prawda?
Znarkus
5
@Znarkus: OP wydaje się być zadowolony. czy argumentowałbyś, że twoje własne wykorzystanie ('#radio_button').clickjest bez click?
David Hedlund
3
@David Druga linia powinna być if ($('#radio_button').is(':checked'))) { alert("it's checked"); }- zapomniałeś znaku jQuery $, a następnie musisz zawinąć to wszystko w nawias.
zuallauz,
2
@zua: masz rację! miał nawet błąd składniowy, taki jaki był wcześniej (niepasujące nawiasy kwadratowe). naprawiono
David Hedlund,
154

Jeśli masz grupę przycisków opcji o tym samym atrybucie nazwy i po przesłaniu lub zdarzeniu chcesz sprawdzić, czy jeden z tych przycisków opcji został zaznaczony, możesz to zrobić po prostu za pomocą następującego kodu:

$(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!');
    }
  });
});

Źródło

jQuery API Ref

Parag
źródło
To mi nie zadziałało. Jeśli zaalarmuję ($ ("input [@ name = 'shipping_method']: zaznaczone"). Val ()); wciąż daje mi wartość, nawet jeśli przycisk opcji nie jest zaznaczony.
AndrewC,
1
Uwaga: jeśli masz kilka formularzy z grupami przycisków opcji o tej samej nazwie, musisz sprawdzić tylko te z przesłanego formularza. Jedną z opcji jest skorzystanie z metody find w formularzu: $('#myform').submit(function(event){ if (!$(this).find("input[name='name']:checked").val()) {
Benjamin
41

Ponieważ rozwiązanie Paraga rzuciło mi błąd, oto moje rozwiązanie (łączące rozwiązanie Davida Hedlunda i Paraga):

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

To działało dobrze dla mnie!

Patrick DaVader
źródło
32

Musisz powiązać zdarzenie kliknięcia pola wyboru, ponieważ zdarzenie zmiany nie działa w IE.

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

Teraz, gdy programowo zmienisz stan, musisz również wywołać to zdarzenie:

$('#radio_button').attr("checked", "checked");
$('#radio_button').click();
Znarkus
źródło
18

// Sprawdź poprzez klasę

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

// Sprawdź nazwę

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

// Sprawdź dane

if($("input:radio[data-name='value']").is(":checked")) {
         //write your code         
}
Nanhe Kumar
źródło
10

Innym sposobem jest użycie (jQuery> = 1.6) :prop

$("input[type=radio]").click(function () {
    if($(this).prop("checked")) { alert("checked!"); }
});
Saeb Amini
źródło
Rzeczywiście .prop()jest znacznie szybszy i po prostu łatwiejszy do pisania.
Marc.2377,
10

Rozwiązanie będzie proste, ponieważ potrzebujesz tylko „słuchaczy”, gdy zaznaczony jest pewien przycisk opcji. Zrób to :-

if($('#yourRadioButtonId').is(':checked')){ 
// Do your listener's stuff here. 
}
Shah-Kodes
źródło
6

Jeśli nie chcesz funkcji kliknięcia, użyj funkcji zmiany Jquery

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

To powinna być odpowiedź, której szukasz. jeśli używasz Jquery w wersji powyżej 1.9.1, spróbuj użyć jako, że funkcja na żywo była przestarzała.

iCezz
źródło
6

... Dzięki chłopaki ... wszystko, czego potrzebowałem, to „wartość” zaznaczonego przycisku opcji, w którym każdy przycisk w zestawie miał inny identyfikator ...

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

pracuje dla mnie...

Bill Warren
źródło
Najbardziej użyteczna odpowiedź
amal50
5

Praca ze wszystkimi typami przycisków radiowych i przeglądarek

if($('#radio_button_id')[0].checked) {
   alert("radiobutton checked")
}
else{
   alert("not checked");
}

Praca Jsfiddle tutaj

Thyagarajan C.
źródło
3

dynamicznie generowany przycisk radiowy Sprawdź wartość radiową

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

Po zmianie dynamiczny przycisk opcji

$('input[name^="radioname"]').change(function () {if (this.value == 2) { }else{}});
Dhaval Kariya
źródło
3

$ ('. radio-button-class-name'). is ('zaznaczone') nie działało dla mnie, ale następny kod działał dobrze:

    if(typeof $('.radio-button-class-name:checked').val() !== 'undefined'){
     // radio button is checked
    }
Jokerius
źródło
1
Ponieważ używałeś go z klasą zamiast z identyfikatorem, zwróciłby listę węzłów zamiast elementu. $('.radio-button-class-name').first().is(':checked')powinien był działać.
Levi Johansen
2

Spróbuj tego

    if($('input[name="radiobutton"]:checked').length == 0) {
        alert("Radio buttons are not checked");
    }
Muhammad Aamir Ali
źródło
1

Spróbuj tego:

alert($('#radiobutton')[0].checked)
Nandha Kumar
źródło
0

jQuery jest nadal popularny, ale jeśli nie chcesz mieć żadnych zależności, zobacz poniżej. Krótka i przejrzysta funkcja, aby sprawdzić, czy przycisk opcji jest zaznaczony na 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>

MaxWall
źródło
-3
$("#radio_1").prop("checked", true);

W przypadku wersji jQuery wcześniejszych niż 1.6 użyj:

$("#radio_1").attr('checked', 'checked');
Jayendra Manek
źródło
2
To ustawia wartość checkedwłaściwości zamiast jej zapytania.
Marc.2377,