2013-04-05 22 views
11

Tôi đã cố gắng chọn các nút radio có lập trình bằng jQuery, điều tôi nghĩ sẽ đơn giản như thay đổi thuộc tính đã chọn.Có lỗi với nút radio trong jQuery 1.9.1 không?

Tuy nhiên, đoạn mã sau dường như không làm gì được mong đợi trong jQuery 1.9.1 trong Chrome/Firefox.

Hành vi mong muốn: Nhấp vào div kèm nút radio -> thuộc tính 'đã chọn' được đặt -> hiển thị được chọn trong DOM.

Hành vi thực tế: Nhấp vào nút div kèm nút radio -> thuộc tính 'đã chọn' -> hiển thị được chọn trong DOM cho nút đầu tiên và nút thứ hai, các nút tiếp theo không hiển thị như đã chọn.

jQuery:

$('div.form-type-radio').on('click', function() {  
    var Id = $(this).find('input[type=radio]').attr('id'); 
    $('form input[type=radio]:not(#'+Id+')').removeAttr('checked'); 
    $('#' + Id).attr('checked', 'checked');  
    console.log($('#' + Id));  
}); 

Dưới đây là một jsFiddle - http://jsfiddle.net/GL9gC/

Tôi đã thử đoạn code tương tự với phiên bản trước của jQuery và tất cả các công trình như mong đợi.

+1

Không phải là nó có liên quan gì với điều này, nhưng tại sao các heck bạn sẽ nhận được các phần tử , sau đó là ID và một số các dòng dưới đây sử dụng ID để lấy lại phần tử? ('không' cũng làm việc với các phần tử). toàn bộ chức năng của bạn có thể chỉ là '$ ('input [type = radio]', điều này) .prop ('kiểm tra', true);' – adeneo

+0

Đó chỉ còn sót lại từ một số đầu gãi và gỡ lỗi, chỉ là hoàn toàn chắc chắn tôi đã ID. – Simon

Trả lời

20

Trong trường hợp này, bạn nên sử dụng prop() thay vì attr()/removeAttr().

Dưới đây là một jsFiddle làm việc.

jQuery:

$('div.form-type-radio').on('click', function() { 
    var Id = $(this).find('input[type=radio]').prop('id'); 
    $('form input[type=radio]:not(#'+Id+')').prop('checked'); 
    $('#' + Id).prop('checked', 'checked'); 
    console.log($('#' + Id)); 
}); 
+4

Cảm ơn bạn, tôi đoán tôi nên đã đọc (jQuery docs) :: "Tuy nhiên, khái niệm quan trọng nhất cần nhớ về các thuộc tính kiểm tra là nó không tương ứng với tài sản kiểm tra. Thuộc tính thực sự tương ứng với defaultChecked tài sản và chỉ nên được sử dụng để đặt giá trị ban đầu của hộp kiểm.Giá trị thuộc tính đã kiểm tra không thay đổi với trạng thái của hộp kiểm, trong khi thuộc tính được kiểm tra thực hiện. Do đó, cách tương thích giữa trình duyệt để xác định xem hộp kiểm có phải là kiểm tra là sử dụng các tài sản " – Simon

+0

Tôi đã mất hạt vì tôi không thể hiểu tại sao attr không làm việc cho một dự án sử dụng 2.1.4. Tốt để biết. –

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