2012-06-22 45 views
57

Tôi muốn kiểm tra xem một hộp kiểm có bị bỏ chọn hay không, khi người dùng nhấp vào nó. Lý do 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. Bởi vì ít nhất một hộp kiểm cần phải được kiểm tra. 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 chính nó.Kiểm tra xem hộp kiểm KHÔNG được chọn khi nhấp chuột - jQuery

Với jQuery tôi có thể dễ dàng tìm ra thời tiết nó kiểm tra hay không:

$('#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 nếu một hộp kiểm chỉ có được kiểm soát.

Vì vậy, tôi nghĩ rằng tôi có thể làm điều đó với đoạn 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 'đánh dấu'. Không thực sự những gì tôi đã mong ...

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 điều này không hoạt động. Tôi không muốn sử dụng ví dụ đầu tiên, bởi 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'.

Điều đầu tiên, đây có phải là lỗi jQuery không? Nguyên nhân với tôi đó là hành vi bất ngờ. Và thứ hai, bất cứ ai có id cho một lựa chọn tốt?

Trả lời

102

Hãy thử điều này:

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

demo

+0

rất đơn giản - không kiểm tra – Binod

2

jQuery để kiểm tra kiểm tra? Có thật không?

if(!this.checked) { 

Không sử dụng bazooka để thực hiện công việc của dao cạo.

+3

sử dụng jQuery để tìm Nếu phần tử, nó sẽ đọc '$ (this) [0] .checked ' – Chris

29

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

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

hoặc

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

Ví dụ đầu tiên trong câu trả lời này eems dễ nhất để đọc ra khỏi tất cả các tùy chọn, vì vậy tôi bỏ phiếu cho điều đó. –

1

Kiểm tra ra một số câu trả lời cho câu hỏi này - Tôi nghĩ rằng nó có thể áp dụng đối với bạn:

how to run click function after default behaviour of a element

Tôi nghĩ bạn đang gặp phải sự không thống nhất trong việc triển khai trình duyệt của hàm onclick. 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 đó.

+0

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

+0

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

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") 
+0

Điều nà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' ReferencError'). Bạn cũng nên sử dụng 'prop()' thay vì 'attr()', nó sẽ trả về một boolean, làm cho boolean thứ hai của bạn cũng thừa. – alex

1

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

demo

$(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'); 
    }); 
}); 
3
$(document).ready(function() { 
     $("#check1").click(function() { 
      var checked = $(this).is(':checked'); 
      if (checked) { 
       alert('checked'); 
      } else { 
       alert('unchecked'); 
      } 
     }); 
    }); 
Các vấn đề liên quan