JQuery'de bir onay kutusunun işaretli olup olmadığını nasıl kontrol edebilirim?


4549

checkedBir onay kutusunun özelliğini kontrol etmek ve jQuery kullanarak işaretli özelliğe dayalı bir eylem gerçekleştirmek gerekiyor.

Örneğin, yaş onay kutusu işaretliyse, yaş girmek için bir metin kutusu göstermem gerekir, aksi takdirde metin kutusunu gizleyin.

Ancak aşağıdaki kod falsevarsayılan olarak döndürülür :

if ($('#isAgeSelected').attr('checked'))
{
    $("#txtAge").show();
}
else
{
    $("#txtAge").hide();
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<input type="checkbox" id="isAgeSelected"/>

<div id="txtAge" style="display:none">
Age is selected
</div>

checkedÖzelliği başarıyla nasıl sorgularım ?


14
$ ('# isAgeSelected') koleksiyonu döndürür, yerine şunu yazın: $ ('# isAgeSelected') [0] .checked
zamoldar

14
neden olmasın$('#isAgeSelected').checked
Don Cheadle

1
Kapsamlı (ve doğru) bir cevap için bakınız: stackoverflow.com/questions/426258/…
Paul Kenjora

12
JQuery seçicileri diziyi döndürdüğünden, kullanabilirsiniz$('#isAgeSelected')[0].checked
Felipe Leão

2
benim için aşağıdaki tweak çalıştı: .attr ('işaretli') yerine .is (': işaretli') ile değiştirin
Mark N Hopgood

Yanıtlar:


3432

İşaretli mülkü nasıl başarılı bir şekilde sorgulayabilirim?

checkedBir onay kutusu DOM öğesinin özelliği size verecektir checkedelemanın durumunu.

Mevcut kodunuz göz önüne alındığında, bunu yapabilirsiniz:

if(document.getElementById('isAgeSelected').checked) {
    $("#txtAge").show();
} else {
    $("#txtAge").hide();
}

Ancak, bunu yapmanın çok daha güzel bir yolu var toggle:

$('#isAgeSelected').click(function() {
    $("#txtAge").toggle(this.checked);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type="checkbox" id="isAgeSelected"/>
<div id="txtAge" style="display:none">Age is something</div>


36
Ben de yukarıdaki koşulu denedim, ama sadece yanlış döndürür
Prasad

24
. $ ( "# txtAge") geçiş (this.checked); $ ("# TxtAge"). Toggle () ile tam olarak aynı şeyi yapar. Bu nedenle, herhangi bir nedenle durum kontrol edilirse ve bir sonraki div gizlenirse (tarayıcınızda geri düğmesini tıkladınız) - beklendiği gibi çalışmaz.
Maksim Vi.

23
@Chiramisu - Cevabı sonuna kadar oksaydınız, düzenlememin is(':checked')işi kullanmadığını fark ederdiniz .
karim79

8
ayarlamak için: $ ("# chkmyElement") [0] .checked = true; almak için: if ($ ("# chkmyElement") [0] .checked)
JJ_Coder4Hire

28
Bu sorunun cevabı değil. this.checkedOP'nin istediği gibi jQuery değil. Ayrıca, yalnızca kullanıcı sorunun bir parçası olmayan onay kutusunu tıkladığında da çalışır. Soru, yine, How to check whether a checkbox is checked in jQuery?herhangi bir zamanda onay kutusunu tıklatarak veya tıklatmadan ve jQuery'de.
Marc Compte

1846

JQuery's is () işlevini kullanın :

if($("#isAgeSelected").is(':checked'))
    $("#txtAge").show();  // checked
else
    $("#txtAge").hide();  // unchecked

19
Süre, hareket hızı vb. İhtiyacınız yoksa kullanabilirsiniz $("#txtAge").toggle($("#isAgeSelected").is(':checked'))
naor

13
+1, kontrol edilen mülk edinmenin farklı yolları vardır. Bazıları burada listelenmiştir
user3199690

@NickG Aslında jQuery yapar bir var : görünür seçici
hvdd

2
@hvdd Biliyorum - "özellik" dedim, seçici değil.
NickG

@NickG ... Ne demek istediğini anlamıyorum. HTML öğesinin hiçbiri görünür bir özelliğe sahip olmadığından jQuery'de .visible"özellik" ( özellik ? demek istediğiniz yöntem ?) yoktur . Onlar-si olmak bir stil özelliği ve açma / kapama biraz daha karmaşık. display
xDaizu

566

JQuery> 1.6'yı kullanma

<input type="checkbox" value="1" name="checkMeOut" id="checkMeOut" checked="checked" />

// traditional attr
$('#checkMeOut').attr('checked'); // "checked"
// new property method
$('#checkMeOut').prop('checked'); // true

Yeni özellik yöntemini kullanarak:

if($('#checkMeOut').prop('checked')) {
    // something when checked
} else {
    // something else when not
}

27
Bunun neden cevap olmadığını bilmek istiyorum ... jquery kullanıyorsanız, .propyöntem sahne kontrol etmek için tasarlanmış bir yoldur. .. ... .is(":checked")Yaklaşımı yapacaksanız , bu iyi, ama jquery kullanarak bunu yapmak için tasarlanmış bir yol değil. sağ?
dsdsdsdsd

1
@dsdsdsdsd muhtemelen başka bir geriye dönük uyumluluk adımına ihtiyacı olduğu için (şu anda aynı sorunla karşı karşıyayım).
user98085

18
.is(":checked")ve .prop("checked")her ikisi de jQuery aynı sonucu elde etmek için geçerli yolları .is, tüm sürümlerinde çalışacak, .prop1.6+ gerektirir
gnarf

Eğer kullanırsanız .attr('checked')jQuery 1.11.3 yılında, kullandığınız takdirde nerede, tanımsız olsun .prop('checked'), sen doğru / false alırsınız. Eski tarayıcılar daha sonra sunulan .prop()ve bu nedenle ihtiyaç duyulan jQuery sürümlerini destekleyemediğinde neden bu şekilde çalışmak için değiştirdiklerini anlamıyorum .attr(). Tek kurtarıcı zarafet, eski tarayıcıların (yani IE 8) hiçbir şeyi destekleyememesidir> jQuery 1.9. Umarım .attr('checked')bu versiyonda bunu yapmamışlardır (make = undefined)! Neyse ki, her zaman vardır this.checked.
vapcguy

230

jQuery 1.6+

$('#isAgeSelected').prop('checked')

jQuery 1.5 ve altı

$('#isAgeSelected').attr('checked')

Herhangi bir jQuery sürümü

// Assuming an event handler on a checkbox
if (this.checked)

Tüm kredi gider Xian .


8
Teknik olarak, this.checkeddüz Javascript kullanıyor. Ama bu çapraz jQuery versiyonu cevabını seviyorum!
vapcguy

170

Bunu kullanıyorum ve bu kesinlikle iyi çalışıyor:

$("#checkkBoxId").attr("checked") ? alert("Checked") : alert("Unchecked");

Not: Onay kutusu işaretlenirse, aksi takdirde tanımsız olarak true değerini döndürür, bu nedenle "TRUE" değerini daha iyi kontrol edin.


6
$ ("# CheckkBoxId"). Attr ("işaretli") "işaretli" veya "" (boş dize) döndürdüğü için çalışır. Ve boş bir dize yanlıştır, boş olmayan dize doğrudur, doğruluk / falsy değerleri hakkında bilgi edinin docs.nodejitsu.com/articles/javascript-conventions/…
Adrien Be

7
Jquery 2.1.x tarafından her zaman varsayılan olarak kontrol edilirse kontrol döndürür ... Bu davranışın kasıtlı olup olmadığını bilmiyorum, ama kesinlikle çalışmıyor (sanırım bir hata) ... val () ya da çalışmıyor, "açık" kalır. Prop () düzgün çalışıyor ve dom.checked de çalışıyor.
inf3rno

1
Ve sorun, eski tarayıcıları desteklemeniz gerektiğinde ortaya çıkar .attr()! Sadece onlar yeterince iyi yalnız bıraktılar .... Burada başka bir cevap bulundu this.checkedsadece temelde Javascript olduğu için, bir çapraz jQuery çözümü için kullanabilirsiniz dedi .
vapcguy

.attr ('işaretli') varsayılan olarak işaretli olup olmadığını test eder, evet. Geçerli durumu değil, html özniteliğini kontrol ettiği için. Önceki sürüm bir hataydı (sanırım çok sömürülen bir tane olsa da).
Jay Irvine

149

kullanın:

<input type="checkbox" name="planned_checked" checked id="planned_checked"> Planned

$("#planned_checked").change(function() {
    if($(this).prop('checked')) {
        alert("Checked Box Selected");
    } else {
        alert("Checked Box deselect");
    }
});

    $("#planned_checked").change(function() {
        if($(this).prop('checked')) {
            alert("Checked Box Selected");
        } else {
            alert("Checked Box deselect");
        }
    });
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<input type="checkbox" name="planned_checked" checked id="planned_checked"> Planned


119

JQuery 1.6'dan beri, davranışı jQuery.attr()değişti ve kullanıcıların bir öğenin denetlenen durumunu almak için kullanmamaları önerilir. Bunun yerine şunları kullanmalısınız jQuery.prop():

$("#txtAge").toggle(
    $("#isAgeSelected").prop("checked") // For checked attribute it returns true/false;
                                        // Return value changes with checkbox state
);

Diğer iki olasılık:

$("#txtAge").get(0).checked
$("#txtAge").is(":checked")

ve $ ("# txtAge") [0]. kontrol edildi
Yevgeniy Afanasyev

101

Bu benim için çalıştı:

$get("isAgeSelected ").checked == true

isAgeSelectedKontrolün kimliği nerede .

Ayrıca, @ karim79'un yanıtı iyi çalışıyor. Test ettiğim zaman neyi kaçırdığımdan emin değilim.

Not, bu cevap jQuery değil, Microsoft Ajax kullanır


4
Her durumda, tüm normal programlama dillerinde atlayabilirsiniz== true
RedPixel

@RedPixel Sıfırlanabilir türlerle uğraşmadıkça. :) (bilgiç smiley)
Kolob Kanyonu

88

Jquery'nin güncel bir sürümünü kullanıyorsanız .prop, sorununuzu çözmek için bir yöntem kullanmanız gerekir :

$('#isAgeSelected').prop('checked')trueişaretlenirse ve falseişaretlenmezse geri döner . Bunu doğruladım ve daha önce bu sorunla karşılaştım. $('#isAgeSelected').attr('checked')ve bu durum için değerli bir cevap olmayan $('#isAgeSelected').is('checked')geri dönüyor undefined. Bu yüzden aşağıda verilenleri yapın.

if($('#isAgeSelected').prop('checked')) {
    $("#txtAge").show();
} else {
    $("#txtAge").hide();
}

Umarım yardımcı olur :)) Teşekkürler.


neden olmasın $('#isAgeSelected').checked?
Don Cheadle

1
. kullanımıyla ( ': işaretli') Eğer ( '# isAgeSelected') bir kolon $ ihtiyaç sının ise
Patrick

62

ClickOlay , olay işleyicisinin checkedyürütülmesi sırasında değişebileceğinden , onay kutusu özelliği için olay işleyicisini kullanmak güvenilmezdir !

İdeal olarak, kodunuzu change, onay kutusunun değeri her değiştiğinde ( nasıl yapıldığından bağımsız olarak) tetiklendiği gibi bir olay işleyicisine koymak istersiniz .

$('#isAgeSelected').bind('change', function () {

   if ($(this).is(':checked'))
     $("#txtAge").show();
   else
     $("#txtAge").hide();
});

3
JQuery 1.7'den itibaren .on()yöntem, olay işleyicilerini bir belgeye eklemek için tercih edilen yöntemdir.
naor

61

kullanın:

<input type="checkbox" id="abc" value="UDB">UDB
<input type="checkbox" id="abc" value="Prasad">Prasad
$('input#abc').click(function(){
  if($(this).is(':checked'))
  {
    var checkedOne=$(this).val()
    alert(checkedOne);

    // Do some other action
  }
})

Bu, gerekli eylemin yalnızca onay işaretini kaldırdığınız zaman değil, kutuyu işaretlediğinizde gerçekleştirilmesini istiyorsanız yardımcı olabilir.


53

Aynı şeyi jQuery olmadan nasıl yapacağınıza dair bir cevap vermeye karar verdim. Sadece asi olduğum için.

var ageCheckbox = document.getElementById('isAgeSelected');
var ageInput = document.getElementById('txtAge');

// Just because of IE <333
ageCheckbox.onchange = function() {
    // Check if the checkbox is checked, and show/hide the text field.
    ageInput.hidden = this.checked ? false : true;
};

İlk önce her iki öğeyi de kimliklerine göre alırsınız. Daha sonra onay kutusunun onchangeetkinliğine, onay kutusunun işaretli olup olmadığını kontrol eden ve hiddenyaş metin alanının özelliğini uygun şekilde ayarlayan bir işlev atarsınız . Üçlü operatör kullanarak bu örnekte.

İşte test etmeniz için bir keman .

ek

Çapraz tarayıcı uyumluluğu bir sorunsa, CSS displayözelliğini none ve inline olarak ayarlamayı öneriyorum .

elem.style.display = this.checked ? 'inline' : 'none';

Daha yavaş ancak tarayıcılar arası uyumlu.


Eh, .hiddençok çapraz tarayıcı olmasa ben bu çözümün :) gibi
Florian Margaine

Gerçekten de kullanmanın en iyi yoludur style. .hiddenPerformans çok daha iyi olduğu için bu talihsiz bir durum .
Florian Margaine

Koşullu bir operatör içinde görevlendirme? Yasal, evet. İyi stil dediğim gibi değil.
Jules

basitleştirebilir: ageInput.hidden =! this.checked; (İnsanlar gereksiz yere boole değişmezleri kullandıklarından nefret ediyorum ... aynı basit ifadede hem "doğru" hem de "yanlış" kullanıyorsanız, muhtemelen her ikisini de kullanmanız gereksizdir)
JoelFan

52

Bunu yapabileceğine inanıyorum:

if ($('#isAgeSelected :checked').size() > 0)
{
    $("#txtAge").show(); 
} else { 
    $("#txtAge").hide();
}

alert ($ ( 'input [name = isAgeSelected]') özn ( 'işaretli').); Yukarıdaki kod, kontrole dayalı olarak doğru / yanlış değerini gösterir. Önceki denemelerle ilgili herhangi bir sorun
Prasad

Prasad, onay kutunuza isme veya kimliğe mi atıfta bulunuyorsunuz? Şimdi kafam karışıyor ...
karim79

Kimlik veremez misiniz? İşler çok daha kolay olurdu,
Örneğinizde

.Size () yöntemi jQuery 1.8'den itibaren kullanımdan kaldırılmıştır. Bunun yerine .length (no () ;-) özelliğini kullanın! Ve belki de "#isAgeSelected: işaretli" olmak zorundasınız.
François Breton

47

Ben de aynı sorunla karşılaştım. ASP.NET onay kutum var

<asp:CheckBox ID="chkBox1" CssClass='cssChkBox1' runat="server" />

JQuery kodunda, onay kutusunun işaretli olup olmadığını kontrol etmek için aşağıdaki seçiciyi kullandım ve bir cazibe gibi çalışıyor gibi görünüyor.

if ($("'.cssChkBox1 input[type=checkbox]'").is(':checked'))
{ ... } else { ... }

CssClass yerine kimliği de kullanabileceğinize eminim,

if ($("'#cssChkBox1 input[type=checkbox]'").is(':checked'))
{ ... } else { ... }

Umarım bu sana yardımcı olur.



46

Bu kod size yardımcı olacaktır

$('#isAgeSelected').click(function(){
   console.log(this.checked);
   if(this.checked == true) {
        $("#txtAge").show();
    } else {
       $("#txtAge").hide();
   }
});

42

Bu benim için çalışıyor:

/* isAgeSelected being id for checkbox */

$("#isAgeSelected").click(function(){
  $(this).is(':checked') ? $("#txtAge").show() : $("#txtAge").hide();
});

41

Bu aynı şeyi yapmak için farklı bir yöntemdir:

$(document).ready(function (){

    $('#isAgeSelected').click(function() {
        // $("#txtAge").toggle(this.checked);

        // Using a pure CSS selector
        if ($(this.checked)) {
            alert('on check 1');
        };

        // Using jQuery's is() method
        if ($(this).is(':checked')) {
            alert('on checked 2');
        };

        //  // Using jQuery's filter() method
        if ($(this).filter(':checked')) {
            alert('on checked 3');
        };
    });
});
<script src="http://code.jquery.com/jquery-1.9.1.js"></script>
<input type="checkbox" id="isAgeSelected"/>
<div id="txtAge" style="display:none">Age is something</div>


35

Bunu kullan:

if ($('input[name="salary_in.Basic"]:checked').length > 0)

Onay kutusu işaretliyse uzunluk sıfırdan büyük.


33

Bunu yapmanın yolu:

if ( $("#checkbox:checked").length ) {       
    alert("checkbox is checked");
} else {
    alert("checkbox is not checked");
}

31
$(selector).attr('checked') !== undefined

trueGiriş kontrol falseedilirse ve kontrol edilmezse geri döner .


4
Her .attr('checked')zaman doğru durumu döndürmemesi ile aynı konuya sahip olmasına rağmen, bunun neden belirli senaryolarda çalışabileceğini anlıyorum . Gereğince Salman A 'nın cevabı (ve belki de başkalarının'), bu faydalanmak için daha güvenli bir seçenek .prop('checked')yerine. Bunun yanı sıra, ilan etmek mümkündür undefinedolarak var undefined = 'checked';.
WynandB

.prop('checked')şimdi daha iyi bir yanıt gibi görünüyor. Yazıldığı sırada güvenilir değildi. Anlamıyorum ve tanımsız olarak yeniden tanımlamanın iyi bir fikir olduğunu düşünmüyorum.
fe_lix_

Yan not olarak, undefined için kontrol daha iyidirtypeof (x) !== "undefined"
naor

Bu durumda! == ile okunmanın daha doğru ve kolay olduğuna inanıyorum. Sadece geçmişte tanımlanmış olabilir veya olmayabilir bir değişkeni test ederken typeof (x) kullanabilirsiniz.
fe_lix_

30
$(document).ready(function() {    
    $('#agecheckbox').click(function() {
        if($(this).is(":checked"))
        {
            $('#agetextbox').show();
        } else {
            $('#agetextbox').hide();
        }
    });
});

30

Kullanabilirsiniz:

  if(document.getElementById('isAgeSelected').checked)
    $("#txtAge").show();  
  else
    $("#txtAge").hide();

if($("#isAgeSelected").is(':checked'))
  $("#txtAge").show();  
else
  $("#txtAge").hide();

İkisi de çalışmalı.


27

1) HTML işaretlemeniz:

<input type="checkbox"  />

kullanılan attr:

$(element).attr("checked"); // Will give you undefined as initial value of checkbox is not set

Prop kullanılıyorsa:

$(element).prop("checked"); // Will give you false whether or not initial value is set

2) HTML işaretlemeniz:

 <input type="checkbox"  checked="checked" />// May be like this also  checked="true"

kullanılan attr:

$(element).attr("checked") // Will return checked whether it is checked="true"

Kullanılan pervane:

$(element).prop("checked") // Will return true whether checked="checked"

Bu gerçek bir sorun. Geçici çözümüm - girişe bir değişiklik olayı ekleyin: <input type = "checkbox" onchange = "ChangeChkBox ()" /> sonra bir boolean JavaScript değişkenini değiştirmek için bu olayı kullanın ve onay kutusunu doğrudan sorgulamak yerine JavaScript değişkenini kullanın.
Graham Laight

24

Bu örnek düğme içindir.

Takip etmeyi dene:

<input type="button" class="check" id="checkall" value="Check All" />  &nbsp; <input type="button" id="remove" value="Delete" /> <br/>

<input type="checkbox" class="cb-element"  value="1" /> Checkbox  1 <br/>
<input type="checkbox" class="cb-element"  value="2" /> Checkbox  2 <br/>
<input type="checkbox" class="cb-element"  value="3" /> Checkbox  3 <br/>


$('#remove').attr('disabled', 'disabled'); 

$(document).ready(function() {  

    $('.cb-element').click(function() {

        if($(this).prop('checked'))
        {
            $('#remove').attr('disabled', false);
        }
        else
        {
            $('#remove').attr('disabled', true);
        }
    });   

    $('.check:button').click(function()
{
    var checked = !$(this).data('checked');
    $('input:checkbox').prop('checked', checked);
    $(this).data('checked', checked);

    if(checked == true)
    {
        $(this).val('Uncheck All');
         $('#remove').attr('disabled', false);
    }

    else if(checked == false)
    {
        $(this).val('Check All');
        $('#remove').attr('disabled', true);
    }
});
});

24

En iyi cevap benim için yapmadı. Bu yine de yaptı:

<script type="text/javascript">
    $(document).ready(function(){

        $("#li_13").click(function(){
            if($("#agree").attr('checked')){
                $("#saveForm").fadeIn();
            }
            else
            {
                $("#saveForm").fadeOut();
            }
        });
    });
</script>

Temel olarak # li_13 öğesi tıklandığında, # agree (onay kutusudur) öğesinin işlev kullanılarak kontrol edilip edilmediğini kontrol eder .attr('checked'). Daha sonra, #saveForm öğesinde fade ve fade değilse saveForm öğesini kapatın.


22

Bunu kullanıyorum:

 <input type="checkbox" id="isAgeSelected" value="1" /> <br/>
 <input type="textbox" id="txtAge" />

 $("#isAgeSelected").is(':checked') ? $("#txtAge").show() : $("#txtAge").hide();

22

Eğer sorun için bir JavaScript çözüm önerdi olmasına rağmen (a görüntüleyen textboxbir zaman checkboxolduğu checked), bu sorun çözülebilir sadece css ile . Bu yaklaşımla formunuz JavaScript'i devre dışı bırakmış kullanıcılar için çalışır.

Aşağıdaki HTML’ye sahip olduğunuzu varsayarsak:

<label for="show_textbox">Show Textbox</label>
<input id="show_textbox" type="checkbox" />
<input type="text" />

İstenilen işlevselliği elde etmek için aşağıdaki CSS'yi kullanabilirsiniz:

 #show_textbox:not(:checked) + input[type=text] {display:none;}

Diğer senaryolar için uygun CSS seçicileri düşünebilirsiniz.

İşte bu yaklaşımı göstermek için bir Keman .


21

Geçiş: 0/1 veya başka

<input type="checkbox" id="nolunch" />
<input id="checklunch />"

    $('#nolunch').change(function () {
    if ($(this).is(':checked')) {
        $('#checklunch').val('1');
    };
    if ($(this).is(':checked') == false) {
        $('#checklunch').val('0');
    };
});

19

Bence basit olacak

$('#isAgeSelected').change(function() {
    if($(this).is(":checked")) {
        $('#txtAge').show();
    }
else{
        $('#txtAge').hide();
    }                                          
});
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.