jQuery: Sprawdź, czy pole wyboru NIE jest zaznaczone


110

Mam problem ze zrozumieniem tego. Mam dwa checkboxy (w przyszłości będzie ich więcej):

  • checkSurfaceEnvironment-1
  • checkSurfaceEnvironment-2

Zasadniczo chcę napisać instrukcję if i sprawdzić, czy jedna z nich jest zaznaczona, a druga NIE. Jaki jest najłatwiejszy sposób wykonania następujących czynności:

if ( $("#checkSurfaceEnvironment-1").attr('checked', true) &&
     $("#checkSurfaceEnvironment-2").is('**(NOT??)** :checked') ) {
        // do something
}

3
Użyj, aby ||nie &&sprawdzać, czy któryś z nich jest zaznaczony. &&sprawdza, czy oba są zaznaczone.
j08691

Odpowiedzi:


212

Jeden niezawodny sposób, którego używam, to:

if($("#checkSurfaceEnvironment-1").prop('checked') == true){
    //do something
}

Jeśli chcesz iterować po zaznaczonych elementach, użyj elementu nadrzędnego

$("#parentId").find("checkbox").each(function(){
    if ($(this).prop('checked')==true){ 
        //do something
    }
});

Więcej informacji:

Działa to dobrze, ponieważ wszystkie pola wyboru mają zaznaczoną właściwość, która przechowuje rzeczywisty stan pola wyboru. Jeśli chcesz, możesz sprawdzić stronę i spróbować zaznaczyć i odznaczyć pole wyboru, a zauważysz, że atrybut „zaznaczone” (jeśli jest obecny) pozostanie taki sam. Ten atrybut reprezentuje tylko początkowy stan pola wyboru, a nie stan bieżący . Bieżący stan jest przechowywany we właściwości zaznaczonej elementu dom dla tego pola wyboru.

Zobacz Właściwości i atrybuty w HTML


2
Umm ... to po prostu ustawichecked = true
Naftali aka Neal.

@Pablo - Sprawdź moją odpowiedź poniżej, która jest również niezawodną opcją / trafną.
Aneesh Vijendran

@PabloMescher Hej, czy możesz mi pomóc? W rzeczywistości chcę określić, które pola wyboru są zaznaczone spośród kilku? I włącz / wyłącz pole tekstowe obok niego. Jakakolwiek pomoc będzie doceniona.
1lastBr3ath

@ 1lastBr3ath oczywiście, jeśli używasz jQuery, musisz po prostu znaleźć selektor dla pola tekstowego względem pola wyboru i użyć mojego drugiego przykładu. Wyglądałoby to mniej więcej tak, jakby ($ (this) .prop ('zaznaczone')) {$ (this) .find ("<textboxSelector>") .attr ("disabled", true); }
Pablo Mescher

1
@Stophface w tym przypadku ta właściwość zawsze będzie wartością logiczną, ponieważ jest to właściwość obliczona, a nie ciąg znaków, więc możesz uciec z użyciem ==.
Mądrze

77
if (!$("#checkSurfaceEnvironment-1").is(":checked")) {
    // do something if the checkbox is NOT checked
}

31

Możesz także użyć .not()metody jQuery lub :not()selektora:

if ($('#checkSurfaceEnvironment').not(':checked').length) {
    // do stuff for not selected
}

Przykład JSFiddle


Dodatkowe uwagi

Z dokumentacji jQuery API dla :not() selektora :

.NOT () metoda zakończy się zapewnić Państwu bardziej czytelny niż pchanie selekcji złożonych selektorów lub zmienne w : not () selektora filtra. W większości przypadków jest to lepszy wybór.


1
! $ ("# checkSurfaceEnvironment"). is (": check") zwraca wartość logiczną. To prawda, jeśli pole wyboru nie jest zaznaczone. $ ('# checkSurfaceEnvironment'). not (': check') zwraca tablicę elementów DOM. Testowanie tego za pomocą „if” zwraca „true”, nawet jeśli selektor nie został dopasowany, a tablica jest pusta. Jedynym sposobem, w jaki twoja odpowiedź może być poprawna, jest przetestowanie i $ ('# checkSurfaceEnvironment'). Not (': check'). Length, co zwróci 0 lub 1.
Thibault Witzig

22

Alternatywny sposób:

Oto działający przykład, a tutaj kod, powinieneś również użyć prop.

$('input[type="checkbox"]').mouseenter(function() { 
    if ($(this).is(':checked')) {
        //$(this).prop('checked',false);
        alert("is checked");
    } else {
         //$(this).prop('checked',true);
        alert("not checked");
    }
});​

Skomentowałem sposób przełączania zaznaczonego atrybutu.


9
if ( $("#checkSurfaceEnvironment-1").is(":checked") && $("#checkSurfaceEnvironment-2").not(":checked") )

6

Szukałem bardziej bezpośredniej implementacji, jak sugerował avijendr.

Miałem mały problem z jego / jej składnią, ale udało mi się to:

if ($('.user-forms input[id*="chkPrint"]:not(:checked)').length > 0)

W moim przypadku miałem tabelę z klasą user-formsi sprawdzałem, czy którekolwiek z pól wyboru, które zawierało ciąg znaków, checkPrintnie idbyło zaznaczone.


5

Myślę, że najłatwiejszym sposobem (z jQuery) sprawdzenia, czy pole wyboru jest zaznaczone, czy NIE, jest:

jeśli „zaznaczone”:

if ($(this).is(':checked')) {
// I'm checked let's do something
}

jeśli NIE 'zaznaczone':

if (!$(this).is(':checked')) {
// I'm NOT checked let's do something
}

4

Tutaj mam fragment na to pytanie.

$(function(){
   $("#buttoncheck").click(function(){
        if($('[type="checkbox"]').is(":checked")){
            $('.checkboxStatus').html("Congratulations! "+$('[type="checkbox"]:checked').length+" checkbox checked");
        }else{
            $('.checkboxStatus').html("Sorry! Checkbox is not checked");
         }
         return false;
   })
    
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<form>
  <p>
    <label>
      <input type="checkbox" name="CheckboxGroup1" value="checkbox" id="CheckboxGroup1_0">
      Checkbox</label>
    <br>
    <label>
      <input type="checkbox" name="CheckboxGroup1_" value="checkbox" id="CheckboxGroup1_1">
      Checkbox</label>
    <br>
  </p>
  <p>
    <input type="reset" value="Reset">
    <input type="submit" id="buttoncheck" value="Check">
  </p>
  <p class="checkboxStatus"></p>
</form>


3

Zrobić to .attr()tak, jak zrobiłeś, sprawdzić, czy jest zaznaczone, to byłoby .attr("checked", "checked"), a jeśli nie, to byłoby.attr("checked") == undefined


1

Zwraca true, jeśli wszystkie checboxy są zaznaczone w div

function all_checked (id_div){
 all_checked = true;

 $(id_div+' input[type="checkbox"]').each(function() { 
    all_checked = all_checked && $('this').prop('checked');
 }

 return all_checked;
}

1

Prosty i łatwy do sprawdzenia lub niezaznaczony stan

<input type="checkbox" id="ev-click" name="" value="" >

<script>
    $( "#ev-click" ).click(function() {
        if(this.checked){
            alert('checked');
        }
        if(!this.checked){
            alert('Unchecked');
        }
    });
</script>

1

Spróbuj tego

if ($("#checkSurfaceEnvironment-1:checked").length>0) {
    //your code in case of NOT checked
}

W powyższym kodzie wybierając element według Id, (#checkSurfaceEnvironment-1)a następnie odfiltruj jego stan zaznaczenia według(:checked) filtr.

Zwróci tablicę zaznaczonego obiektu elementu. Jeśli w tablicy istnieje jakiś obiekt, to warunek zostanie spełniony.


Chociaż twoja odpowiedź może pomóc, powinieneś przynajmniej wyjaśnić dlaczego. W tej chwili Twoja odpowiedź została przekazana do kolejki moderacji Postów niskiej jakości (tam, gdzie ją przeglądam). Proponuję edytować odpowiedź, aby dodać wyjaśnienie.
Chris Spittles,

1

Stan można sprawdzić na dwa sposoby.

if ($("#checkSurfaceEnvironment-1").is(":checked")) {
    // Put your code here if checkbox is checked
}

LUB możesz użyć tego również

if($("#checkSurfaceEnvironment-1").prop('checked') == true){
    // Put your code here if checkbox is checked
}

Mam nadzieję, że to Ci się przyda.


1

Oto najprostszy podany sposób

 <script type="text/javascript">

        $(document).ready(function () {
            $("#chk_selall").change("click", function () {

                if (this.checked)
                {
                    //do something
                }
                if (!this.checked)
                {
                    //do something

                }

            });

        });

    </script>

0

Użyłem tego i zadziałało dla mnie!

$("checkbox selector").click(function() {
    if($(this).prop('checked')==true){
       do what you need!
    }
});

0

Wiem, że na to już udzielono odpowiedzi, ale nadal jest to dobry sposób:

if ($("#checkbox").is(":checked")==false) {
    //Do stuff here like: $(".span").html("<span>Lorem</span>");
}

0
if($("#checkbox1").prop('checked') == false){
    alert('checkbox is not checked');
    //do something
}
else
{ 
    alert('checkbox is checked');
}

4
Chociaż może to odpowiedzieć na pytanie autorów, brakuje w nim słów wyjaśniających i / lub linków do dokumentacji. Fragmenty surowego kodu nie są zbyt pomocne bez otaczających je wyrażeń. Może się również okazać, że bardzo pomocne może być napisanie dobrej odpowiedzi . Edytuj swoją odpowiedź - From Review
Nick,

-4
$("#chkFruits_0,#chkFruits_1,#chkFruits_2,#chkFruits_3,#chkFruits_4").change(function () {
        var item = $("#chkFruits_0,#chkFruits_1,#chkFruits_2,#chkFruits_3,#chkFruits_4");
    if (item.is(":checked")==true) {
        //execute your code here
    }

    else if (item.is(":not(:checked)"))
    {
        //execute your code here
    }

});
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.