2011-12-16 25 views
11

Thông tin: jQuery 1.6.0 HTML hộp kiểm:jQuery checkbox luôn trả về 'undefined'

Trước tiên tôi đã thực hiện chắc chắn jQuery được nạp với:

if(jQuery) { 
    alert("loaded"); 
} 

Và đây là trường hợp, nó được tải. Sau đó immidiately dòng sau đó tôi sử dụng:

var returnvalue = jQuery("#mycheckbox").attr("checked"); 
alert(returnvalue); 

này, đối với một số lý do, luôn luôn cảnh báo 'undefined'. Tôi chắc chắn 100% ID tồn tại. Tôi cũng đã thử phương pháp sau:

jQuery("#mycheckbox").find('input[type="checkbox"]').each(function(){ 
    alert("foo"); 
    if (jQuery(this).is(":checked")) 
     ReturnVal = true; 
}); 

Nhưng điều này thậm chí không bật lên cảnh báo.

Tôi đang làm gì sai? Tôi là một chuyên gia về jQuery hoặc Javascript, nhưng điều này sẽ hoạt động ... đúng không?

Edit: Tôi đã thử:

jQuery(document).ready(function() { 
    alert(id); 
    var returnvalue = jQuery("#" . id).prop("checked"); 
    alert(returnvalue); 
}); 

Các alert (id) mang lại cho tôi ID thích hợp, nhưng alert (returnValue) trả về xác định.

Tôi cũng đã thử:

if(jQuery) { 
    alert("loaded"); 
} 
jQuery(function() { 
    alert(id); 
    var returnvalue = jQuery("#" . id).attr("checked"); 
    alert(returnvalue); 
}); 

Cùng một kết quả

Edit2: Sau khi sử dụng .prop VÀ phụ id với một '+' thay vì một '' (PHP thói quen), nó hoạt động. Cảm ơn mọi sự giúp đỡ của bạn!

+1

'jQuery (" # ". Id)' là sai. Bạn đang yêu cầu thuộc tính 'id' của chuỗi' "#" '. – RightSaidFred

+0

Chết tiệt, bạn nói đúng! Đây là lần đầu tiên tôi làm việc với javascript, tôi đã luôn làm việc với PHP, vì vậy tôi đã quen với '.'. Bạn hoàn toàn đúng, điều này thậm chí còn cố định vấn đề của tôi, cảm ơn bạn rất nhiều! – pbond

Trả lời

13
  • Nếu bạn đang sử dụng jQuery 1.6 hay muộn, sử dụng prop() thay vì attr():

var returnvalue = jQuery("#mycheckbox").prop("checked"); 

này là bởi vì nếu bạn không bao gồm rõ ràng checked thuộc tính với phần tử, sau đó thuộc tính là undefined mặc dù thuộc tính sẽ có thuộc tính mặc định.


  • Bạn cần phải loại bỏ các .find():
jQuery("#mycheckbox").each(function(){ 
    alert("foo"); 
    if (jQuery(this).is(":checked")) 
     ReturnVal = true; 
}); 

Bao gồm HTML của bạn trong câu hỏi sẽ là hữu ích.

4

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

if(jQuery) { 
    alert("loaded"); 
} 
$(function() { 
    var returnvalue = $("#mycheckbox").attr("checked"); 
    alert(returnvalue); 
}); 

Cập nhật

Nếu kịch bản của bạn là ở phía trên cùng của trang, nó thực thi trước khi HTML được tải. Trong thời gian đó, attr ('checked') là không xác định.

Bằng cách gói mã trong chức năng ẩn danh tự thực hiện $ (function() {...}), mã của bạn sẽ thực thi sau khi tải HTML.

trả lời bình luận

Mã của bạn:

function isChecked(id) 
{ 
    if(jQuery) { alert("loaded"); } 
    $(function() { 
     alert(id); 
     var returnvalue = $("#" + id).attr("checked"); 
     alert(returnvalue); 
    }); 
} 

Hãy thử điều này. những gì nó cảnh báo?

function isChecked(id) 
{ 
    if(jQuery) { alert("loaded"); } 
    alert(id); 
    alert('there are this many elements with matching id: ' + $("#" . id).length); 
    var returnvalue = $("#" + id).attr("checked"); 
    alert(returnvalue); 
} 

Cảnh báo thứ 3 có nói "có nhiều yếu tố này có khớp với id: 0" không?

+0

Tôi hiện có mã sau: 'function isChecked (id) { nếu (jQuery) { cảnh báo (" đã nạp "); } $ (function() { alert (id); var returnValue = $ ("#" id) .attr ("kiểm tra");. alert (returnValue); }); ' mà vẫn trả về không xác định. Cảnh báo (id) cảnh báo ID thích hợp. Hơn nữa, khi tôi nhấn gửi (trang được tải sau đó ofcourse), nó vẫn trả về undefined. – pbond

+0

xin vui lòng gửi mã cập nhật trong câu hỏi ban đầu của bạn, họ rất khó để đọc trong ý kiến. – danludwig

+0

Xin chào, thông báo 'có nhiều yếu tố này với id phù hợp: 0'. – pbond

2

Sử dụng .prop$('#checkbox1').prop('checked'), jQuery 1.6 +

Về thuộc tính boolean, hãy xem xét một phần tử DOM định nghĩa bởi đánh dấu HTML <input type="checkbox" checked="checked" />, và cho rằng đó là trong một biến JavaScript có tên là elem:

elem.checked true (Boolean) Will change with checkbox state 
$(elem).prop("checked") true (Boolean) Will change with checkbox state 
elem.getAttribute("checked") "checked" (String) Initial state of the checkbox; does not change 
$(elem).attr("checked")(1.6) "checked" (String) Initial state of the checkbox; does not change 
$(elem).attr("checked")(1.6.1+) "checked" (String) Will change with checkbox state 
$(elem).attr("checked")(pre-1.6) true (Boolean) Changed with checkbox state 

Theo hình thức đặc điểm kỹ thuật của W3C, thuộc tính kiểm tra là thuộc tính boolean, có nghĩa là thuộc tính tương ứng là true nếu thuộc tính hiện diện - ngay cả khi, ví dụ, thuộc tính không có giá trị hoặc giá trị chuỗi rỗng. Cách ưa thích qua trình duyệt tương thích để xác định xem một hộp kiểm được kiểm tra là để kiểm tra một giá trị "truthy" về sở hữu của phần tử sử dụng một trong các cách sau:

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

Nếu sử dụng jQuery 1.6, mã if ($(elem).attr("checked")) sẽ truy xuất thuộc tính nội dung thực tế, không thay đổi khi hộp kiểm được chọn và bỏ chọn. Nó có nghĩa là chỉ để lưu trữ giá trị mặc định hoặc ban đầu của thuộc tính đã chọn. Để duy trì tính tương thích ngược, phương thức .attr() trong jQuery 1.6.1+ sẽ truy xuất và cập nhật thuộc tính cho bạn để không có mã nào cho các thuộc tính boolean được yêu cầu phải được thay đổi thành .prop(). Tuy nhiên, cách ưu tiên để truy xuất giá trị đã chọn là một trong các tùy chọn được liệt kê ở trên. Để xem cách thức hoạt động trong jQuery mới nhất, hãy chọn/bỏ chọn hộp kiểm trong ví dụ bên dưới.