Bagaimana saya memeriksa apakah kotak centang dicentang di jQuery?


4550

Saya perlu memeriksa checkedproperti kotak centang dan melakukan tindakan berdasarkan properti yang diperiksa menggunakan jQuery.

Misalnya, jika kotak centang usia dicentang, maka saya perlu menunjukkan kotak teks untuk memasukkan usia, selain itu sembunyikan kotak teks.

Tetapi kode berikut kembali falsesecara default:

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>

Bagaimana cara saya berhasil menanyakan checkedproperti?


14
$ ('# isAgeSelected') mengembalikan koleksi, ganti dengan: $ ('# isAgeSelected') [0] .checked
zamoldar

14
kenapa tidak$('#isAgeSelected').checked
Don Cheadle

1
Untuk jawaban yang komprehensif (dan benar) lihat: stackoverflow.com/questions/426258/…
Paul Kenjora

12
Karena pemilih kembali jQuery array, Anda dapat menggunakan$('#isAgeSelected')[0].checked
Felipe Leão

2
bagi saya tweak berikut berfungsi: ganti .attr ('checked') dengan .is (': checked')
Mark N Hopgood

Jawaban:


3433

Bagaimana cara saya berhasil menanyakan properti yang diperiksa?

The checkedproperti dari elemen kotak centang DOM akan memberikan checkedkeadaan elemen.

Dengan kode yang ada, Anda dapat melakukan ini:

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

Namun, ada cara yang jauh lebih cantik untuk melakukan ini, menggunakan 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
Saya telah mencoba kondisi di atas juga, tetapi hanya mengembalikan palsu saja
Prasad

24
$ ("# txtAge"). toggle (this.checked); Apakah persis sama dengan $ ("# txtAge"). Toggle (). Jadi, jika karena alasan tertentu keadaan dicentang dan div berikutnya disembunyikan (Anda mengklik tombol kembali di browser Anda) - itu tidak akan berfungsi seperti yang diharapkan.
Maksim Vi.

23
@ Ciramisu - Jika Anda telah membaca jawabannya sepenuhnya, Anda akan memperhatikan bahwa hasil edit saya tidak menggunakan is(':checked')bisnis ini.
karim79

8
untuk menetapkan: $ ("# chkmyElement") [0] .checked = true; untuk mendapatkan: if ($ ("# chkmyElement") [0] .checked)
JJ_Coder4Hire

28
Ini bukan jawaban untuk pertanyaan itu. this.checkedbukan jQuery, seperti yang diminta OP. Selain itu, ini hanya berfungsi ketika pengguna mengklik kotak centang, yang bukan bagian dari pertanyaan. Pertanyaannya adalah, sekali lagi, How to check whether a checkbox is checked in jQuery?pada waktu tertentu dengan atau tanpa mengklik kotak centang dan di jQuery.
Marc Compte

1847

Gunakan fungsi jQuery's () :

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

19
Jika Anda tidak membutuhkan durasi, pelonggaran, dll., Anda dapat menggunakan $("#txtAge").toggle($("#isAgeSelected").is(':checked'))
naor

13
+1 ada berbagai cara untuk mendapatkan properti yang diperiksa. Beberapa tercantum di sini
user3199690

@NickG Sebenarnya jQuery tidak memiliki : pemilih terlihat
hvdd

2
@ DVDD saya tahu - saya katakan "properti", bukan pemilih.
NickG

@NickG ... Saya tidak mengerti maksud Anda. jQuery tidak memiliki .visible"properti" ( properti ? maksud Anda metode ?) karena elemen tanpa HTML memiliki properti yang terlihat . Mereka memiliki display properti gaya dan sedikit lebih kompleks daripada on / off.
xDaizu

567

Menggunakan jQuery> 1.6

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

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

Menggunakan metode properti baru:

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

27
Saya ingin tahu mengapa ini bukan jawabannya ... jika Anda menggunakan jquery sama sekali, maka .propmetode ini adalah cara yang dirancang untuk memeriksa alat peraga. ... ... Jika Anda akan melakukan .is(":checked")pendekatan, itu bagus, tetapi itu bukan cara yang dirancang untuk melakukannya menggunakan jquery. Baik?
dsdsdsdsd

1
@dsdsdsdsd mungkin karena perlu langkah kompatibilitas mundur (saya menghadapi masalah yang sama sekarang).
user98085

18
.is(":checked")dan .prop("checked")keduanya merupakan cara yang valid untuk mendapatkan hasil yang sama di jQuery, .isakan bekerja di semua versi, .propmembutuhkan 1.6+
gnarf

Jika Anda menggunakan .attr('checked')di jQuery 1.11.3, Anda tidak terdefinisi, di mana jika Anda gunakan .prop('checked'), Anda akan menjadi benar / salah. Saya tidak melihat mengapa mereka mengubahnya agar berfungsi seperti ini ketika browser lama tidak dapat mendukung versi jQuery kemudian yang diperkenalkan .prop()dan karenanya perlu .attr(). Satu-satunya rahmat yang menyelamatkan adalah bahwa browser lama (yaitu IE 8) tidak dapat mendukung apa pun> jQuery 1.9. Semoga mereka tidak melakukan ini (make .attr('checked')= undefined) dalam versi itu! Untungnya, selalu ada this.checked.
vapcguy

230

jQuery 1.6+

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

jQuery 1.5 dan di bawah

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

Versi jQuery apa pun

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

Semua kredit jatuh ke Xian .


8
Secara teknis, this.checkedmenggunakan Javascript lurus. Tapi saya suka jawaban lintas-jQuery-versi!
vapcguy

170

Saya menggunakan ini dan ini berfungsi dengan sangat baik:

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

Catatan: Jika kotak centang dicentang maka akan mengembalikan true jika tidak terdefinisi, jadi lebih baik periksa nilai "TRUE".


6
Ini berfungsi karena $ ("# checkkBoxId"). Attr ("checked") mengembalikan "checked" atau "" (string kosong). Dan string kosong adalah falsy, string non-kosong adalah truthy, lihat tentang nilai-nilai truthy / falsy docs.nodejitsu.com/articles/javascript-convention/…
Adrien Be

7
Dengan jquery 2.1.x ia mengembalikan selalu diperiksa jika dicentang secara default ... Saya tidak tahu apakah perilaku ini disengaja, tetapi pasti tidak bekerja (saya kira itu adalah bug) ... Val () tidak bekerja, itu tetap "aktif". Prop () berfungsi dengan benar dan dom.check berfungsi dengan baik.
inf3rno

1
Dan masalahnya muncul ketika Anda harus mendukung browser lama dengan .attr()! Kalau saja mereka hanya meninggalkan cukup baik saja .... Menemukan jawaban lain di sini mengatakan Anda hanya dapat menggunakan this.checkeduntuk solusi lintas-jQuery, karena itu pada dasarnya hanya Javascript.
vapcguy

.attr ('dicentang') akan menguji apakah dicentang secara default, ya. Karena memeriksa atribut html , bukan keadaan saat ini. Versi sebelumnya adalah bug (walaupun banyak yang dieksploitasi, saya kira).
Jay Irvine

149

Menggunakan:

<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

Sejak jQuery 1.6, perilaku jQuery.attr()telah berubah dan pengguna disarankan untuk tidak menggunakannya untuk mengambil status elemen yang diperiksa. Sebagai gantinya, Anda harus menggunakan jQuery.prop():

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

Dua kemungkinan lain adalah:

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

dan $ ("# txtAge") [0] .checked
Yevgeniy Afanasyev

101

Ini bekerja untuk saya:

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

Di mana isAgeSelectedid kontrol.

Juga, jawaban @ karim79 berfungsi dengan baik. Saya tidak yakin apa yang saya lewatkan pada saat saya mengujinya.

Catatan, ini adalah jawaban menggunakan Microsoft Ajax, bukan jQuery


4
Dalam semua kasus, dalam semua bahasa pemrograman normal, Anda dapat menghilangkan== true
RedPixel

@RedPixel Kecuali Anda berurusan dengan tipe nullable. :) (pedantic smiley)
Kolob Canyon

88

Jika Anda menggunakan versi jquery yang diperbarui, Anda harus mencari .propmetode untuk menyelesaikan masalah Anda:

$('#isAgeSelected').prop('checked')akan kembali truejika dicentang dan falsejika tidak dicentang. Saya mengkonfirmasinya dan saya menemukan masalah ini sebelumnya. $('#isAgeSelected').attr('checked')dan $('#isAgeSelected').is('checked')kembali undefinedyang bukan jawaban yang layak untuk situasi ini. Jadi lakukan seperti yang diberikan di bawah ini.

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

Semoga bisa membantu :)) - Terima kasih.


mengapa tidak $('#isAgeSelected').checked?
Don Cheadle

1
untuk menggunakan .is Anda memerlukan $ 2 ('# isAgeSelected'.) is (': dicentang')
Patrick

62

Menggunakan Clickpengendali event untuk properti kotak centang tidak dapat diandalkan, karena checkedproperti dapat berubah selama eksekusi pengendali event itu sendiri!

Idealnya, Anda ingin memasukkan kode Anda ke changeevent handler seperti dipecat setiap kali nilai kotak centang diubah (terlepas dari bagaimana melakukannya).

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

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

3
Pada jQuery 1.7, .on()metode ini adalah metode yang disukai untuk melampirkan penangan acara ke dokumen.
naor

61

Menggunakan:

<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
  }
})

Ini dapat membantu jika Anda ingin tindakan yang diperlukan harus dilakukan hanya ketika Anda menandai kotak tidak pada saat Anda menghapus centang.


53

Saya memutuskan untuk mengirim jawaban tentang cara melakukan hal yang persis sama tanpa jQuery. Hanya karena aku seorang pemberontak.

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;
};

Pertama, Anda mendapatkan kedua elemen dengan ID mereka. Kemudian Anda menetapkan acara kotak centang onchangefungsi yang memeriksa apakah kotak centang diperiksa dan mengaturhidden properti bidang teks usia secara tepat. Dalam contoh itu menggunakan operator ternary.

Ini biola bagi Anda untuk mengujinya.

Tambahan

Jika kompatibilitas lintas-browser adalah masalah maka saya mengusulkan untuk mengatur displayproperti CSS ke none dan inline .

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

Lebih lambat tapi kompatibel lintas-browser.


Yah, .hiddentidak terlalu lintas-browser, meskipun saya suka solusi ini :)
Florian Margaine

Ini memang cara terbaik untuk digunakan style. Itu sangat disayangkan, karena .hiddenkinerja jauh lebih baik .
Florian Margaine

Penugasan di dalam operator bersyarat? Legal, ya. Bukan apa yang saya sebut gaya yang baik.
Jules

dapat menyederhanakan: ageInput.hidden =! ini diperiksa; (Saya benci ketika orang menggunakan boolean literals secara tidak perlu ... jika Anda menggunakan keduanya "benar" dan "salah" dalam pernyataan sederhana yang sama, mungkin juga tidak perlu menggunakan keduanya)
JoelFan

52

Saya yakin Anda bisa melakukan ini:

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

alert ($ ('input [name = isAgeSelected]'). attr ('checked')); Kode di atas menunjukkan benar / salah berdasarkan cek. Masalah dengan percobaan sebelumnya
Prasad

Prasad, apakah Anda merujuk kotak centang Anda dengan nama atau ID? Aku mulai bingung sekarang ...
karim79

Tidak bisakah kamu memberikannya ID? Segala sesuatu akan jauh lebih mudah, Dalam contoh Anda, Anda telah mengatasinya dengan ID itu
xenon

Metode .size () tidak digunakan lagi pada jQuery 1.8. Gunakan properti .length (tanpa properti () ;-)! Dan mungkin Anda harus tetap bersatu "#isAgeSelected: checked".
François Breton

47

Saya berlari ke masalah yang sama persis. Saya memiliki kotak centang ASP.NET

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

Dalam kode jQuery saya menggunakan pemilih berikut untuk memeriksa apakah kotak centang dicentang atau tidak, dan tampaknya berfungsi seperti pesona.

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

Saya yakin Anda juga bisa menggunakan ID bukan CssClass,

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

Saya harap ini membantu Anda.



46

Kode ini akan membantu Anda

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

42

Ini bekerja untuk saya:

/* isAgeSelected being id for checkbox */

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

41

Ini adalah beberapa metode berbeda untuk melakukan hal yang sama:

$(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

Gunakan ini:

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

Panjangnya lebih besar dari nol jika kotak centang dicentang.


33

Cara saya melakukan ini adalah:

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

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

Ini mengembalikan truejika input dicentang dan falsejika tidak.


4
Saya mengerti mengapa ini bisa berhasil dalam skenario tertentu, meskipun memiliki masalah yang sama seperti .attr('checked')itu tidak selalu mengembalikan keadaan yang benar. Sebagai per Salman A 's jawaban (dan mungkin orang lain), itu adalah pilihan yang lebih aman untuk menggunakan .prop('checked')sebagai gantinya. Selain itu, dimungkinkan juga untuk menyatakan undefinedsebagai var undefined = 'checked';.
WynandB

.prop('checked')sepertinya jawaban yang lebih baik sekarang. Itu tidak dapat diandalkan pada saat itu ditulis. Saya tidak mengerti, juga tidak berpikir itu adalah ide yang baik untuk mendeklarasikan ulang tidak terdefinisi.
fe_lix_

Sebagai catatan tambahan, memeriksa undefined lebih baik dengantypeof (x) !== "undefined"
naor

Dalam hal ini, saya percaya ini lebih akurat dan lebih mudah dibaca dengan! ==. Saya akan menggunakan typeof (x) hanya ketika menguji suatu variabel yang mungkin atau mungkin tidak didefinisikan di masa lalu.
fe_lix_

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

30

Kamu bisa menggunakan:

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

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

Keduanya harus bekerja.


27

1) Jika markup HTML Anda adalah:

<input type="checkbox"  />

attr digunakan:

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

Jika prop digunakan:

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

2) Jika markup HTML Anda adalah:

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

attr digunakan:

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

Prop digunakan:

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

Ini adalah masalah NYATA. Solusi saya - tambahkan acara perubahan ke input: <input type = "checkbox" onchange = "ChangeChkBox ()" /> kemudian gunakan acara itu untuk mengubah variabel JavaScript boolean, dan gunakan variabel JavaScript alih-alih menanyakan kotak centang secara langsung.
Graham Laight

24

Contoh ini untuk tombol.

Coba yang berikut ini:

<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

Jawaban teratas tidak melakukannya untuk saya. Ini melakukan:

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

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

Pada dasarnya ketika elemen # li_13 diklik, ia memeriksa apakah elemen # setuju (yang merupakan kotak centang) diperiksa dengan menggunakan .attr('checked')fungsi. Jika kemudian fadeIn elemen #saveForm, dan jika tidak fadeOut elemen saveForm.


22

Saya menggunakan ini:

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

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

22

Meskipun Anda telah mengusulkan solusi JavaScript untuk masalah Anda (menampilkan textboxketika checkboxadalah checked), masalah ini dapat diselesaikan hanya dengan css . Dengan pendekatan ini, formulir Anda berfungsi untuk pengguna yang telah menonaktifkan JavaScript.

Dengan asumsi Anda memiliki HTML berikut:

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

Anda dapat menggunakan CSS berikut untuk mencapai fungsionalitas yang diinginkan:

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

Untuk skenario lain, Anda mungkin memikirkan penyeleksi CSS yang tepat.

Berikut adalah biola untuk menunjukkan pendekatan ini .


21

Toggle: 0/1 atau yang lain

<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

Saya pikir itu akan menjadi yang sederhana

$('#isAgeSelected').change(function() {
    if($(this).is(":checked")) {
        $('#txtAge').show();
    }
else{
        $('#txtAge').hide();
    }                                          
});
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.