2011-01-27 42 views
541

Nếu hộp kiểm được chọn, thì tôi chỉ cần nhận giá trị là 1; nếu không, tôi cần để có được nó như là 0. Làm thế nào để làm điều này bằng cách sử dụng jQuery?Kiểm tra xem hộp kiểm có được chọn với jQuery

$("#ans").val() sẽ luôn luôn cho tôi một trong những quyền trong trường hợp này:

<input type="checkbox" id="ans" value="1" /> 
+2

.val() là lấy thuộc tính giá trị chứ không phải trạng thái kiểm tra. Thuộc tính value có thể là bất cứ thứ gì, nó không cần phải là boolean. –

Trả lời

946

Sử dụng .is(':checked') để xác định có hay không nó được kiểm tra, và sau đó thiết lập giá trị của mình cho phù hợp.

More information here.

+1

Ngoài ra, khi bạn làm $ ("# id") là ("đã kiểm tra") trong mệnh đề if bạn sẽ nhận được true hoặc false, không bật/tắt, bằng cách trả lại và bạn có thể gửi nó đến back-end của bạn kịch bản và làm bất cứ điều gì bạn muốn. – Zanoldor

+0

Có lẽ điều này không quan trọng hiện nay: ReSharper (tôi đoán) đưa ra một cảnh báo "** Lớp giả 'được chọn' không tương thích với Internet Explorer 8.0 **". –

4

Sử dụng:

$("#ans option:selected").val() 
+0

nếu nó không được chọn, sau đó phần đầu tiên sẽ không trả lại bất cứ điều gì, phải không? – xaxxon

+0

@ Thứ tư, OP không yêu cầu nhận giá trị của hộp kiểm đã chọn, thay vì 'trả lại'' 1' nếu được chọn –

202
$("#ans").attr('checked') 

sẽ cho bạn biết nếu nó được kiểm tra. Bạn cũng có thể sử dụng tham số thứ hai true/false để kiểm tra/bỏ chọn hộp kiểm.

$("#ans").attr('checked', true); 

mỗi bình luận, sử dụng prop thay vì attr when available. Ví dụ:

$("#ans").prop('checked') 
+12

.prop() cho thư viện jQuery 1.6+; hoạt động hoàn hảo! Cảm ơn bạn – peevesy

+1

Vâng, .prop() là lựa chọn tốt nhất. Tôi đang sử dụng một hộp kiểm phong cách lib và .attr() không hoạt động. Chúc mừng – kabadisha

6

Bạn cũng có thể sử dụng:

$("#ans:checked").length == 1; 
83

Chỉ cần sử dụng $(selector).is(':checked')

Nó trả về một giá trị boolean.

15

Tôi đã tìm thấy cùng một vấn đề trước đây, hy vọng giải pháp này có thể giúp bạn. đầu tiên, thêm một thuộc tính tùy chỉnh để hộp kiểm của bạn:

<input type="checkbox" id="ans" value="1" data-unchecked="0" /> 

viết một phần mở rộng jQuery để nhận được giá trị:

$.fn.realVal = function(){ 
    var $obj = $(this); 
    var val = $obj.val(); 
    var type = $obj.attr('type'); 
    if (type && type==='checkbox') { 
     var un_val = $obj.attr('data-unchecked'); 
     if (typeof un_val==='undefined') un_val = ''; 
     return $obj.prop('checked') ? val : un_val; 
    } else { 
     return val; 
    } 
}; 

đang sử dụng để có được giá trị kiểm tra hộp:

$('#ans').realVal(); 

bạn có thể kiểm tra here

+9

... bởi vì jQuery được biết đến như là "viết nhiều hơn làm ít" thư viện – myshadowself

+0

câu chuyện dài bạn đã đi đến xa JQUERY muốn nhà phát triển viết ít hơn và làm nhiều hơn nữa. vấn đề đơn giản xứng đáng giải pháp đơn giản – ShapCyber

+0

có, đồng ý, viết ít hơn, làm nhiều hơn. bạn viết phần mở rộng một lần, và trong thời gian còn lại, bạn chỉ gọi API $ (someradio) .realVal(), bạn không cần phải viết phần mở rộng nhiều lần. – alphakevin

4
function chkb(bool){ 
if(bool) 
return 1; 
return 0; 
} 

var statusNum=chkb($("#ans").is(':checked')); 

statusNum sẽ bằng 1 nếu hộp kiểm được chọn và 0 nếu không.

EDIT: Bạn cũng có thể thêm DOM vào hàm.

function chkb(el){ 
if(el.is(':checked')) 
return 1; 
return 0; 
} 

var statusNum=chkb($("#ans")); 
1

thử này

$('input:checkbox:checked').click(function(){ 
    var val=(this).val(); // it will get value from checked checkbox; 
}) 

Đây cờ là đúng nếu kiểm tra bằng cách khác sai

var flag=$('#ans').Attr('checked'); 

Một lần nữa điều này sẽ làm cho cheked

$('#ans').Attr('checked',true); 
51
// use ternary operators 
$("#ans").is(':checked') ? 1 : 0; 
+6

Để làm gì? is (': checked') đã trả về giá trị boolean –

+0

@Loic để đặt giá trị của mình bằng cú pháp ternary terse, ví dụ:: a = ischecked? 1: 0 –

7
$('input:checkbox:checked').val();  // get the value from a checked checkbox 
6
<input type="checkbox" id="ans" value="1" /> 

Jquery: var test= $("#ans").is(':checked') và nó trở lại đúng hay sai.

Trong chức năng của bạn:

$test =($request->get ('test')== "true")? '1' : '0'; 
18

câu trả lời Stefan Brinkmann là tuyệt vời, nhưng không đầy đủ cho người mới bắt đầu (bỏ qua sự phân công biến). Chỉ cần làm rõ:

// this structure is called a ternary operator 
var cbAns = ($("#ans").is(':checked')) ? 1 : 0; 

Nó hoạt động như thế này:

var myVar = (if test goes here) ? 'ans if yes' : 'ans if no' ; 

Ví dụ:

var myMath = (1 > 2) ? 'yes' : 'no' ; 
alert(myMath); 

Cảnh báo 'không'

Nếu đây là hữu ích, xin vui lòng upvote Stefan Câu trả lời của Brinkmann.

16

Bạn có thể thử này:

$('#studentTypeCheck').is(":checked"); 
2

tôi đã đến qua một trường hợp gần đây, nơi tôi đã cần check value của checkbox khi người dùng nhấp vào nút. Cách thích hợp duy nhất để làm như vậy là sử dụng thuộc tính prop().

var ansValue = $("#ans").prop('checked') ? $("#ans").val() : 0; 

điều này có thể xảy ra trong trường hợp của tôi có thể ai đó sẽ cần đến.

Khi tôi đã thử .attr(':checked'), nó trả về checked nhưng tôi muốn giá trị boolean và .val() giá trị trả về của thuộc tính value.

0

Bạn có thể nhận được giá trị (true/false) bởi hai phương pháp này

$("input[type='checkbox']").prop("checked"); 
$("input[type='checkbox']").is(":checked"); 
3

Có vài tùy chọn là có thích ....

1. $("#ans").is(':checked') 
2. $("#ans:checked") 
3. $('input:checkbox:checked'); 

Nếu tất cả những lựa chọn trở thành sự thật sau đó bạn có thể thiết lập giá trị accourdingly.

+0

Cái đầu tiên phải là (': checked'), không hoạt động theo cách khác. –

0

Nếu bạn muốn giá trị nguyên được chọn hoặc không thử:

$ ("# ans: checked").length

Các vấn đề liên quan