Làm cách nào để kiểm tra xem hộp kiểm có được kiểm tra trong jQuery không?


4550

Tôi cần kiểm tra thuộc checkedtính của hộp kiểm và thực hiện hành động dựa trên thuộc tính được kiểm tra bằng jQuery.

Ví dụ: nếu hộp kiểm tuổi được chọn, thì tôi cần hiển thị hộp văn bản để nhập tuổi, nếu không thì ẩn hộp văn bản.

Nhưng đoạn mã sau trả về falsetheo mặc định:

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>

Làm thế nào để tôi truy vấn thành công checkedtài sản?


14
$ ('# isAgeSelected') trả về bộ sưu tập, thay thế nó bằng: $ ('# isAgeSelected') [0] .checked
zamoldar

14
tại sao không$('#isAgeSelected').checked
Don Cheadle

1
Để có câu trả lời toàn diện (và chính xác), hãy xem: stackoverflow.com/questions/426258/ trên
Paul Kenjora

12
Do bộ chọn jQuery trả về mảng, bạn có thể sử dụng$('#isAgeSelected')[0].checked
Felipe Leão

2
đối với tôi, các tinh chỉnh sau đã hoạt động: thay thế .attr ('đã kiểm tra') bằng .is (': đã kiểm tra')
Mark N Hopgood

Câu trả lời:


3433

Làm thế nào để tôi truy vấn thành công tài sản được kiểm tra?

Các checkedtài sản của một yếu tố checkbox DOM sẽ cung cấp cho bạn checkedtrạng thái của phần tử.

Do mã hiện tại của bạn, do đó bạn có thể làm điều này:

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

Tuy nhiên, có một cách đẹp hơn để làm điều này, bằng cách sử dụng 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
tôi cũng đã thử điều kiện trên, nhưng nó chỉ trả về sai
Prasad

24
$ ("# txtAge"). chuyển đổi (this.checked); Không chính xác như $ ("# txtAge"). Toggle (). Vì vậy, nếu vì lý do nào đó, trạng thái được kiểm tra và div tiếp theo bị ẩn (bạn đã nhấp vào nút quay lại trong trình duyệt của mình) - nó sẽ không hoạt động như mong đợi.
Maksim Vi.

23
@Chiramisu - Nếu bạn đã đọc hết câu trả lời, bạn sẽ nhận thấy rằng chỉnh sửa của tôi không sử dụng is(':checked')doanh nghiệp.
karim79

8
để đặt: $ ("# chkmyEuity") [0] .checked = true; để nhận: if ($ ("# chkmyEuity") [0] .checked)
JJ_Coder4Hire

28
Đây không phải là một câu trả lời cho câu hỏi. this.checkedkhông phải là jQuery, như OP yêu cầu. Ngoài ra, nó chỉ hoạt động khi người dùng nhấp vào hộp kiểm, đây không phải là một phần của câu hỏi. Câu hỏi là, một lần nữa, How to check whether a checkbox is checked in jQuery?tại bất kỳ thời điểm nào có hoặc không nhấp vào hộp kiểm và trong jQuery.
Marc Compte

1847

Sử dụng hàm is () của jQuery :

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

19
Nếu bạn không cần thời lượng, nới lỏng, v.v., bạn có thể sử dụng $("#txtAge").toggle($("#isAgeSelected").is(':checked'))
naor

13
+1 có nhiều cách khác nhau để có được tài sản được kiểm tra. Một số được liệt kê ở đây
user3199690

@NickG Trên thực tế jQuery không có một : selector có thể nhìn thấy
hvdd

2
@hvdd Tôi biết - Tôi đã nói "tài sản", không phải bộ chọn.
NickG 20/07/2015

@NickG ... Tôi không hiểu ý của bạn. jQuery không có .visible"property" (thuộc tính ? Ý bạn là phương thức ?) Bởi vì phần tử HTML không có thuộc tính hiển thị . Họ có một thuộc tính display kiểu và nó phức tạp hơn một chút so với bật / tắt.
xDaizu

567

Sử dụng 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

Sử dụng phương thức thuộc tính mới:

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

27
Tôi muốn biết lý do tại sao đây không phải là câu trả lời ... nếu bạn đang sử dụng jquery, thì .propphương pháp là cách thiết kế để kiểm tra đạo cụ. .. ... Nếu bạn định thực hiện .is(":checked")phương pháp này, điều đó tốt, nhưng đó không phải là cách được thiết kế để sử dụng jquery. đúng?
dsdsdsdsd

1
@dsdsdsdsd có lẽ bởi vì nó cần thêm một bước tương thích ngược (hiện tôi đang phải đối mặt với cùng một vấn đề).
dùng98085

18
.is(":checked").prop("checked")là cả hai cách hợp lệ để có cùng kết quả trong jQuery, .issẽ hoạt động trong tất cả các phiên bản, .propyêu cầu 1.6+
gnarf

Nếu bạn sử dụng .attr('checked')trong jQuery 1.11.3, bạn sẽ không xác định được, nếu bạn sử dụng .prop('checked'), bạn sẽ nhận được đúng / sai. Tôi không hiểu tại sao họ thay đổi nó để hoạt động theo cách này khi các trình duyệt cũ hơn không thể hỗ trợ các phiên bản jQuery sau đó được giới thiệu .prop()và do đó cần .attr(). Điều may mắn duy nhất là các trình duyệt cũ hơn (ví dụ IE 8) không thể hỗ trợ bất cứ điều gì> jQuery 1.9. Hy vọng rằng họ đã không làm điều này (make .attr('checked')= không xác định) trong phiên bản đó! May mắn thay, luôn luôn có this.checked.
vapcguy

230

jQuery 1.6+

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

jQuery 1.5 trở xuống

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

Mọi phiên bản của jQuery

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

Tất cả tín dụng đến Tây An .


8
Về mặt kỹ thuật, this.checkedđang sử dụng Javascript thẳng. Nhưng tôi thích câu trả lời phiên bản chéo jQuery đó!
vapcguy

170

Tôi đang sử dụng cái này và nó hoạt động hoàn toàn tốt:

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

Lưu ý: Nếu hộp kiểm được chọn, nó sẽ trả về giá trị true nếu không được xác định, vì vậy hãy kiểm tra giá trị "TRUE" tốt hơn.


6
Điều này hoạt động vì $ ("# checkkBoxId"). Attr ("đã kiểm tra") trả về "đã kiểm tra" hoặc "" (chuỗi trống). Và một chuỗi rỗng là sai, chuỗi không trống là sự thật, hãy xem về các giá trị trung thực
Adrien Be

7
Bởi jquery 2.1.x, nó trả về luôn được kiểm tra nếu nó được kiểm tra theo mặc định ... Tôi không biết liệu hành vi này có cố ý hay không, nhưng chắc chắn nó không hoạt động (tôi đoán đó là một lỗi) ... Val () cũng không hoạt động, nó vẫn "bật". Prop () đang hoạt động đúng và dom.checked cũng hoạt động.
inf3rno

1
Và vấn đề xảy ra khi bạn phải hỗ trợ các trình duyệt cũ hơn .attr()! Nếu chỉ họ chỉ còn lại một mình đủ tốt .... Tìm thấy một câu trả lời khác ở đây cho biết bạn chỉ có thể sử dụng this.checkedcho một giải pháp cross-jQuery, vì về cơ bản nó chỉ là Javascript.
vapcguy

.attr ('đã kiểm tra') sẽ kiểm tra xem nó có được kiểm tra theo mặc định không, có. Bởi vì nó đang kiểm tra thuộc tính html , không phải trạng thái hiện tại. Phiên bản trước là một lỗi (mặc dù đã bị khai thác rất nhiều, tôi đoán vậy).
Jay Irvine

149

Sử dụng:

<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

Kể từ jQuery 1.6, hành vi của jQuery.attr()đã thay đổi và người dùng được khuyến khích không sử dụng nó để truy xuất trạng thái đã kiểm tra của một phần tử. Thay vào đó, bạn nên sử dụng jQuery.prop():

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

Hai khả năng khác là:

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

và $ ("# txtAge") [0]. đã được kiểm tra
Yevgeniy Afanasyev

101

Điều này làm việc cho tôi:

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

Đâu isAgeSelectedlà id của điều khiển.

Ngoài ra, câu trả lời của @ karim79 hoạt động tốt. Tôi không chắc chắn những gì tôi đã bỏ lỡ tại thời điểm tôi thử nghiệm nó.

Lưu ý, đây là câu trả lời sử dụng Microsoft Ajax, không phải jQuery


4
Trong mọi trường hợp, trong tất cả các ngôn ngữ lập trình thông thường, bạn có thể bỏ qua== true
RedPixel

@RedPixel Trừ khi bạn đang xử lý các loại nullable. :) (nụ cười nham hiểm)
Kolob Canyon

88

Nếu bạn đang sử dụng phiên bản cập nhật của jquery, bạn phải dùng .propphương pháp để giải quyết vấn đề của mình:

$('#isAgeSelected').prop('checked')sẽ trở lại truenếu được chọn và falsenếu không được chọn. Tôi đã xác nhận nó và tôi đã gặp vấn đề này sớm hơn. $('#isAgeSelected').attr('checked')$('#isAgeSelected').is('checked')đang trở lại undefinedmà không phải là một câu trả lời xứng đáng cho tình huống này. Vì vậy, làm như được đưa ra dưới đây.

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

Hy vọng nó sẽ giúp :) - Cảm ơn.


tại sao không $('#isAgeSelected').checked?
Don Cheadle

1
để sử dụng .is bạn cần một dấu hai chấm $ ('# isAgeSelected'). is (': đã kiểm tra')
Patrick

62

Sử dụng Clicktrình xử lý sự kiện cho thuộc tính hộp kiểm là không đáng tin cậy, vì thuộc checkedtính có thể thay đổi trong quá trình thực thi trình xử lý sự kiện!

Lý tưởng nhất là bạn muốn đặt mã của mình vào một changetrình xử lý sự kiện, chẳng hạn như mã này được kích hoạt mỗi khi giá trị của hộp kiểm được thay đổi (không phụ thuộc vào cách thực hiện).

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

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

3
Kể từ jQuery 1.7, .on()phương thức này là phương thức ưa thích để đính kèm các trình xử lý sự kiện vào tài liệu.
naor

61

Sử dụng:

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

Điều này có thể giúp đỡ nếu bạn muốn rằng hành động cần thiết chỉ phải được thực hiện khi bạn đánh dấu vào ô không tại thời điểm bạn xóa séc.


53

Tôi quyết định đăng một câu trả lời về cách làm điều tương tự chính xác mà không cần jQuery. Chỉ vì tôi là một kẻ nổi loạn.

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

Đầu tiên bạn có được cả hai yếu tố bằng ID của họ. Sau đó, bạn chỉ định onchangesự kiện của hộp kiểm một chức năng kiểm tra xem hộp kiểm đã được kiểm tra chưa và đặt thuộc hiddentính của trường văn bản tuổi một cách thích hợp. Trong ví dụ đó sử dụng toán tử ternary.

Đây là một mẹo để bạn kiểm tra nó.

Phụ lục

Nếu khả năng tương thích giữa các trình duyệt là một vấn đề thì tôi đề xuất đặt thuộc tính CSS displaythành khôngnội tuyến .

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

Chậm hơn nhưng tương thích trình duyệt chéo.


Chà, .hiddenkhông phải là rất nhiều trình duyệt, mặc dù tôi thích giải pháp này :)
Florian Margaine

Nó thực sự là cách tốt nhất để sử dụng style. Điều đó thật đáng tiếc, vì .hiddenhiệu suất là cách tốt hơn .
Florian Margaine

Chuyển nhượng bên trong một toán tử có điều kiện? Pháp lý, vâng. Không phải những gì tôi gọi là phong cách tốt, tuy nhiên.
Jules

có thể đơn giản hóa thành: ageInput.hidden =! cái này (Tôi ghét khi mọi người sử dụng chữ boolean một cách không cần thiết ... nếu bạn đang sử dụng cả "đúng" và "sai" trong cùng một tuyên bố đơn giản, có lẽ không cần thiết phải sử dụng)
JoelFan

52

Tôi tin rằng bạn có thể làm điều này:

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

alert ($ ('input [name = isAgeSelected]'). attr ('đã kiểm tra')); Đoạn mã trên hiển thị đúng / sai dựa trên kiểm tra. Bất kỳ vấn đề nào với các lần thử trước
Prasad

Prasad, bạn đang tham khảo hộp kiểm của mình theo tên hoặc ID? Bây giờ tôi đang bối rối ...
karim79

Bạn có thể không cung cấp cho nó một ID? Mọi thứ sẽ dễ dàng hơn rất nhiều, Trong ví dụ của bạn, bạn đã giải quyết nó bằng ID
xenon

Phương thức .size () không được dùng trong jQuery 1.8. Thay vào đó, hãy sử dụng thuộc tính .length (không có () ;-)! Và có lẽ bạn phải gắn bó với nhau "#isAgeSelected: đã kiểm tra".
François Breton

47

Tôi chạy vào vấn đề chính xác tương tự. Tôi có một hộp kiểm ASP.NET

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

Trong mã jQuery, tôi đã sử dụng bộ chọn sau để kiểm tra xem hộp kiểm có được kiểm tra hay không và dường như nó hoạt động như một bùa mê.

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

Tôi chắc rằng bạn cũng có thể sử dụng ID thay vì CssClass,

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

Tôi hy vọng cái này sẽ giúp bạn.



46

Mã này sẽ giúp bạn

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

42

Điều này làm việc cho tôi:

/* isAgeSelected being id for checkbox */

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

41

Đây là một số phương pháp khác nhau để làm điều tương tự:

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

Dùng cái này:

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

Độ dài lớn hơn 0 nếu hộp kiểm được chọn.


33

Cách làm của tôi là:

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

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

Điều này trả về truenếu đầu vào được kiểm tra và falsenếu nó không.


4
Tôi hiểu tại sao điều này có thể hoạt động trong một số trường hợp nhất định, mặc dù nó có cùng một vấn đề như .attr('checked')ở chỗ nó không luôn trả về trạng thái chính xác. Theo câu trả lời của Salman A (và có lẽ là của người khác), đó là một lựa chọn an toàn hơn để sử dụng thay thế. Bên cạnh đó, cũng có thể tuyên bố là . .prop('checked')undefinedvar undefined = 'checked';
WynandB

.prop('checked')Có vẻ như một câu trả lời tốt hơn bây giờ. Nó không đáng tin cậy vào thời điểm nó được viết. Tôi không hiểu, cũng không nghĩ rằng đó là một ý tưởng tốt để xác định lại không xác định.
fe_lix_

Là một lưu ý phụ, kiểm tra không xác định là tốt hơn vớitypeof (x) !== "undefined"
naor

Trong trường hợp đó, tôi tin rằng nó chính xác hơn và dễ đọc hơn! ==. Tôi sẽ chỉ sử dụng typeof (x) khi kiểm tra một biến có thể hoặc không được xác định trong quá khứ.
fe_lix_

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

30

Bạn có thể dùng:

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

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

Cả hai nên làm việc.


27

1) Nếu đánh dấu HTML của bạn là:

<input type="checkbox"  />

attr sử dụng:

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

Nếu prop được sử dụng:

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

2) Nếu đánh dấu HTML của bạn là:

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

attr sử dụng:

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

Prop được sử dụng:

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

Đây là một vấn đề thực sự. Giải pháp của tôi - thêm một sự kiện thay đổi vào đầu vào: <input type = "hộp kiểm" onchange = "ChangeChkBox ()" /> sau đó sử dụng sự kiện đó để thay đổi biến JavaScript boolean và sử dụng biến JavaScript thay vì truy vấn trực tiếp hộp kiểm.
Graham Laight

24

Ví dụ này là cho nút.

Hãy thử như sau:

<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

Câu trả lời hàng đầu đã không làm điều đó cho tôi. Điều này đã làm mặc dù:

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

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

Về cơ bản khi phần tử # li_13 được nhấp, nó sẽ kiểm tra xem phần tử # có đồng ý (là hộp kiểm) được kiểm tra bằng cách sử dụng .attr('checked')hàm không. Nếu đó là fade fade trong phần tử #saveForm và nếu không fadeOut phần tử saveForm.


22

Tôi đang sử dụng cái này:

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

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

22

Mặc dù bạn đã đề xuất một giải pháp JavaScript cho vấn đề của mình (hiển thị textboxkhi checkboxchecked), vấn đề này có thể được giải quyết chỉ bằng css . Với phương pháp này, biểu mẫu của bạn hoạt động cho người dùng đã tắt JavaScript.

Giả sử rằng bạn có HTML sau:

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

Bạn có thể sử dụng CSS sau để đạt được chức năng mong muốn:

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

Đối với các kịch bản khác, bạn có thể nghĩ về các bộ chọn CSS thích hợp.

Dưới đây là một Fiddle để chứng minh phương pháp này .


21

Chuyển đổi: 0/1 hoặc khác

<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

Tôi nghĩ nó sẽ đơn giản

$('#isAgeSelected').change(function() {
    if($(this).is(":checked")) {
        $('#txtAge').show();
    }
else{
        $('#txtAge').hide();
    }                                          
});
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.