Kiểm tra xem hộp kiểm KHÔNG được chọn khi nhấp chuột - jQuery


86

Tôi muốn kiểm tra xem một hộp kiểm vừa được bỏ chọn khi người dùng nhấp vào nó. Lý do cho điều này là vì tôi muốn thực hiện xác thực khi người dùng bỏ chọn hộp kiểm. Vì ít nhất một hộp kiểm cần được chọn. Vì vậy, nếu anh ta bỏ chọn cái cuối cùng, thì nó sẽ tự động kiểm tra lại.

Với jQuery, tôi có thể dễ dàng tìm hiểu xem nó đã được kiểm tra hay chưa:

$('#check1').click(function() {
    if($(this).is(':checked'))
        alert('checked');
    else
        alert('unchecked');
});

Nhưng tôi thực sự chỉ muốn có một câu lệnh if kiểm tra xem một hộp kiểm vừa được bỏ chọn hay không.

Vì vậy, tôi nghĩ rằng tôi có thể làm điều đó với mã sau:

$('#check2').click(function() {
    if($(this).not(':checked'))
        alert('unchecked');
    else
        alert('checked');
});

Nhưng điều này sẽ luôn hiển thị thông báo 'không được chọn'. Không thực sự như những gì tôi mong đợi ...

demo: http://jsfiddle.net/tVM5H/

Vì vậy, cuối cùng tôi cần một cái gì đó như:

$('#check2').click(function() {
    if($(this).not(':checked')) {
        // Got unchecked, so something!!!
    }
});

Nhưng rõ ràng là điều này không hiệu quả. Tôi không muốn sử dụng ví dụ đầu tiên, vì sau đó tôi sẽ có một câu lệnh 'else' không cần thiết khi tôi chỉ cần một câu lệnh 'if'.

Vì vậy, điều đầu tiên, đây có phải là một lỗi jQuery không? Nguyên nhân đối với tôi đó là hành vi không mong đợi. Và thứ hai, có ai muốn tìm một giải pháp thay thế tốt không?

Câu trả lời:



50

Câu trả lời đã được đăng sẽ hoạt động. Nếu bạn muốn sử dụng jQuery: not, bạn có thể làm điều này:

if ($(this).is(':not(:checked)'))

hoặc là

if ($(this).attr('checked') == false)

Ví dụ đầu tiên trong câu trả lời này có vẻ dễ đọc nhất trong số tất cả các lựa chọn, vì vậy tôi bỏ phiếu cho điều đó.
Toby 1 Kenobi

5

jQuery để kiểm tra xem đã kiểm tra chưa? Có thật không?

if(!this.checked) {

Không sử dụng bazooka để làm công việc của một dao cạo râu.


4
Nếu sử dụng jQuery để tìm nguyên tố này, cần đọc$(this)[0].checked
Chris

@HoldOffHunger Nó là một phần của phần tử đầu vào gốc: developer.mozilla.org/en-US/docs/Web/HTML/Element/input/… Nếu bạn đang sử dụng jQuery thì Chris có cú pháp chính xác trong nhận xét phía trên của bạn.
TheZ

@TheZ: Đẹp! Vâng, bạn đúng, câu trả lời của Chris là tốt. Đề xuất: Thêm nó để trả lời với tín dụng? Cả câu trả lời OP và câu trả lời hàng đầu đều nghiêng về phía $ (selector) .is ('...'), là một giải pháp jQuery thuần túy. Chỉ sử dụng .checkednơi chúng có .is('checked')sẽ không tự hoạt động.
HoldOffHunger

5
$(document).ready(function() {
        $("#check1").click(function() {
            var checked = $(this).is(':checked');
            if (checked) {
                alert('checked');
            } else {
                alert('unchecked');
            }
        });
    });


2

Hãy xem một số câu trả lời cho câu hỏi này - Tôi nghĩ nó có thể áp dụng cho câu hỏi của bạn:

cách chạy chức năng nhấp chuột sau hành vi mặc định của một phần tử

Tôi nghĩ rằng bạn đang gặp phải sự mâu thuẫn trong việc triển khai onclickchức năng của trình duyệt . Một số chọn chuyển đổi hộp kiểm trước khi sự kiện được kích hoạt và một số sau đó.


Điều này cũng thực sự quan trọng.
TheZ

Và đó là lý do tại sao jQuery để kiểm tra đã kiểm tra. Có thật không. ;)
JoeBrockhaus

1

Câu trả lời đã được đăng. Nhưng chúng ta cũng có thể sử dụng jquery theo cách này

bản giới thiệu

$(function(){
    $('#check1').click(function() {
        if($('#check1').attr('checked'))
            alert('checked');
        else
            alert('unchecked');
    });

    $('#check2').click(function() {
        if(!$('#check2').attr('checked'))
            alert('unchecked');
        else
            alert('checked');
    });
});

0

Làm nó như thế này

if (typeof $(this).attr("checked") == "undefined" )

// To check if checkbox is checked
if( $(this).attr("checked")=="checked")

Đây chỉ có thể là this.checked. Dòng đầu tiên không cần typeofở đó (nó sẽ không bao giờ tăng a ReferencError). Bạn cũng nên sử dụng prop()thay vì attr(), nó sẽ trả về một boolean, làm cho cái thứ hai của bạn cũng dư thừa.
alex
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.