Używanie JQuery do sprawdzenia, czy żaden przycisk radiowy w grupie nie został zaznaczony

107

Siedzę z problemem, muszę sprawdzić w JQuery, czy żaden przycisk radiowy w grupie przycisków opcji nie został zaznaczony, abym mógł dać użytkownikom błąd javascript, jeśli zapomną zaznaczyć opcję.

Używam następującego kodu, aby uzyskać wartości

var radio_button_val = $("input[name='html_elements']:checked").val();
Elitmiar
źródło

Odpowiedzi:

146
if (!$("input[name='html_elements']:checked").val()) {
   alert('Nothing is checked!');
}
else {
  alert('One of the radio buttons is checked!');
}
Dominic Rodger
źródło
17
To się nie powiedzie, jeśli zaznaczony przycisk opcji ma wartość = ""
ScottE
1
@ScottE - doskonała uwaga - usunę tę odpowiedź, jeśli Roland jej nie zaakceptuje.
Dominic Rodger
Myślę, że możesz po prostu zmienić to na .val() == ""i usunąć !i wszystko będzie gotowe.
Doug Neiner
@Doug - czy to nadal nie miałoby problemu, o którym wspomniał ScottE? Co by .val()zwróciło, gdyby zaznaczony przycisk opcji miał value=""? (Chociaż przypuszczam, że można argumentować, że jest to dość mało prawdopodobny przypadek).
Dominic Rodger
1
Przepraszam, mój komentarz był zagmatwany: chciałem, żeby cały test wyglądał tak: if ($("input[name='html_elements']:checked").val() == "")co będzie ostrzegać „Nic nie jest sprawdzane”
Doug Neiner
144

używam

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

I zwróci FALSE, jeśli wszystkie elementy w grupie radiowej są odznaczone, i TRUE, jeśli element jest zaznaczony.

Jacobo Hernández
źródło
3
Ta odpowiedź działała dla mnie niezawodnie, aby sprawdzić, czy grupa przycisków opcji ma wybraną wartość. Najlepsza odpowiedź w wątku.
Andy Cook
1
Zarówno odpowiedź Dominica Rodgera, jak i Jacobo Hernándeza działają dobrze. Osobiście staram się nigdy nie używać początkowego NIE (!) Na początku linii. Wiele lat później trudno jest debugować, gdy przeoczysz to i masz odwrotną logikę ... jest (": zaznaczone") bardzo jasne, co robisz - Najlepsza odpowiedź.
Scott
32

Możesz zrobić coś takiego:

var radio_buttons = $("input[name='html_elements']");
if( radio_buttons.filter(':checked').length == 0){
  // None checked
} else {
  // If you need to use the result you can do so without
  // another (costly) jQuery selector call:
  var val = radio_buttons.val();
}
Doug Neiner
źródło
2
Czy nie mógłbyś zawęzić pierwszych dwóch linii do tylko if ($("input[name='html_elements']:checked").length == 0){?
Powerlord
7
Mógłbyś, ale wtedy potrzebowałbyś kolejnego pełnego wyboru jQuery, aby uzyskać wartość, jeśli pokazałeś, że wartość istnieje.
Doug Neiner
5
if ($("input[name='html_elements']:checked").size()==0) {
   alert('Nothing is checked!');
}
else {
  alert('One of the radio buttons is checked!');
}
fanjabi
źródło
2
var len = $('#your_form_id input:radio:checked').length;
      if (!len) {
        alert("None checked");
      };
      alert("checked: "+ len);
David Okwii
źródło
2

Myślę, że to prosty przykład, jak sprawdzić, czy sprawdzono radio w grupie radia.

if($('input[name=html_elements]:checked').length){
    //a radio button was checked
}else{
    //there was no radio button checked
} 
Vitali D.
źródło
0

Używam tego o wiele prostego

HTML

<label class="radio"><input id="job1" type="radio" name="job" value="1" checked>New Job</label>
<label class="radio"><input id="job2" type="radio" name="job" value="2">Updating Job</label>


<button type="button" class="btn btn-primary" onclick="save();">Save</button>

SCENARIUSZ

 $('#save').on('click', function(e) {
    if (job1.checked)
        {
              alert("New Job"); 
        }
if (job2.checked)
        {
            alert("Updating Job");
        }

}

Mathew Magante
źródło