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?

Prasad
sumber
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>

karim79
sumber
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
Bhanu Krishnan
sumber
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
}
SeanDowney
sumber
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 .

ungalcrys
sumber
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".

Pradeep
sumber
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

Lalji Dhameliya
sumber
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")
Salman A
sumber
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

Prasad
sumber
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.

Rajesh Omanakuttan
sumber
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();
});
arviman
sumber
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.

UDB
sumber
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.

Oktavianus A. Damiean
sumber
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();
}
xenon
sumber
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.

Nertim
sumber
46

Ada banyak cara untuk memeriksa apakah kotak centang dicentang atau tidak:

Cara memeriksa menggunakan jQuery

if (elem.checked)
if ($(elem).prop("checked"))
if ($(elem).is(":checked"))
if ($(elem).attr('checked'))

Lihat contoh atau juga dokumentasikan:

Parth Chavda
sumber
46

Kode ini akan membantu Anda

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

Ini bekerja untuk saya:

/* isAgeSelected being id for checkbox */

$("#isAgeSelected").click(function(){
  $(this).is(':checked') ? $("#txtAge").show() : $("#txtAge").hide();
});
ashish amatya
sumber
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>

Sangeet Shah
sumber
35

Gunakan ini:

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

Panjangnya lebih besar dari nol jika kotak centang dicentang.

Hamid NK
sumber
33

Cara saya melakukan ini adalah:

if ( $("#checkbox:checked").length ) {       
    alert("checkbox is checked");
} else {
    alert("checkbox is not checked");
}
Dalius I
sumber
31
$(selector).attr('checked') !== undefined

Ini mengembalikan truejika input dicentang dan falsejika tidak.

fe_lix_
sumber
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();
        }
    });
});
Jumper Pot
sumber
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.

Muhammad Awais
sumber
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"
Somnath Kharat
sumber
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);
    }
});
});
usayee
sumber
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.

BigHomie
sumber
22

Saya menggunakan ini:

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

 $("#isAgeSelected").is(':checked') ? $("#txtAge").show() : $("#txtAge").hide();
Nishant
sumber
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 .

Ormoz
sumber
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');
    };
});
user2385302
sumber
19

Saya pikir itu akan menjadi yang sederhana

$('#isAgeSelected').change(function() {
    if($(this).is(":checked")) {
        $('#txtAge').show();
    }
else{
        $('#txtAge').hide();
    }                                          
});
Dam Jitendra
sumber