2009-09-10 38 views
40

Tôi đang cố vô hiệu hóa các nút radio này khi liên kết loadActive được nhấp nhưng vì một số lý do nó chỉ vô hiệu hóa nút đầu tiên theo thứ tự và sau đó bỏ qua phần còn lại.Vô hiệu hóa các nút radio với jQuery

<form id="chatTickets" method="post" action="/admin/index.cfm/"> 
    <input id="ticketID1" type="radio" checked="checked" value="myvalue1" name="ticketID"/> 
    <input id="ticketID2" type="radio" checked="checked" value="myvalue2" name="ticketID"/> 
</form> 
<a href="#" title="Load ActiveChat" id="loadActive">Load Active</a> 

Và đây là jquery Tôi đang sử dụng:

jQuery("#loadActive").click(function() { 
    //I have other code in here that runs before this function call 
    writeData(); 
}); 
function writeData() { 
    jQuery("input[name='ticketID']").each(function(i) { 
    jQuery(this).attr('disabled', 'disabled'); 
}); 
} 
+1

Các bạn đã thử sử dụng firebug, sử dụng bộ chọn để có được một loạt các yếu tố và xem có bao nhiêu là trong mảng? –

+0

mọi thứ bạn có ở đó hoạt động tốt cho tôi. – geowa4

+0

Vâng, nó hoạt động trong sandbox của tôi, mặc dù điều này đến từ một tập tin lớn hơn nhiều Tôi nghĩ rằng cái gì khác là làm cho nó không hoạt động. Sử dụng các lớp học, chọn nó một cách khác nhau vẫn CHỈ vô hiệu hóa các đài phát thanh đầu tiên và không phải phần còn lại. Nhưng trong sandbox nó hoạt động hoàn hảo ugh – user46785

Trả lời

8

Thứ nhất, cú pháp hợp lệ là

jQuery("input[name=ticketID]") 

thứ hai, bạn đã cố gắng:

jQuery(":radio") 

thay thế?

thứ ba, tại sao không chỉ định một lớp cho tất cả các nút radio và chọn chúng theo lớp?

+1

Thực tế "đầu vào [name = 'ticketID']" là cú pháp hợp lệ, các dấu nháy đơn không cần thiết. – karim79

+1

tại sao không chỉ sử dụng tên? và chọn chúng? nó sẽ hoạt động tốt; Tôi đã thực hiện nó một triệu lần. – geowa4

+0

Tôi đồng ý với mkoryak: "chỉ định một lớp cho tất cả các nút radio và chọn chúng theo lớp" –

1

Bạn nên sử dụng các lớp để làm cho nó đơn giản hơn, thay vì tên thuộc tính hoặc bất kỳ bộ chọn jQuery nào khác.

+0

hãy để tôi đoán, bạn sử dụng đường ray? – geowa4

+1

Thực ra tôi không biết. Bạn có thể xây dựng? – rogeriopvl

+0

đường ray có công cụ ký hiệu mảng cho hộp kiểm. nhưng bạn có thể có nhiều hai mục có cùng tên mà không có "[]" – geowa4

43

Tôi đã refactored mã của bạn một chút, điều này sẽ làm việc:

jQuery("#loadActive").click(writeData); 

function writeData() { 
    jQuery("#chatTickets input:radio").attr('disabled',true); 
} 

Nếu có nhiều hơn hai nút radio trên biểu mẫu, bạn sẽ phải thay đổi bộ chọn, ví dụ, bạn có thể sử dụng starts with attribute filter để chọn ra các radio có ID bắt đầu với ticketID:

function writeData() { 
    jQuery("#chatTickets input[id^=ticketID]:radio").attr('disabled',true); 
} 
+0

sẽ tắt mọi nút radio trong biểu mẫu đó. trong câu hỏi của ông có thể chỉ có hai, nhưng có khả năng sẽ nhiều hơn. – geowa4

+0

@ geowa4 - đúng, tôi cho rằng đó là radio duy nhất trên mẫu của anh ấy. Trong mọi trường hợp, tôi đã chỉnh sửa để hữu ích hơn một chút. – karim79

+1

+1 để xóa bỏ '.each()' vô ích; '.attr()' sẽ áp dụng cho tất cả các phần tử được chọn. – gnarf

3

tôi chỉ xây dựng một môi trường sandbox với mã của bạn và nó làm việc cho tôi. Đây là những gì tôi đã sử dụng:

<html> 
    <head> 
    <title>test</title> 
    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script> 
    </head> 
    <body> 
    <form id="chatTickets" method="post" action="/admin/index.cfm/"> 
     <input id="ticketID1" type="radio" checked="checked" value="myvalue1" name="ticketID"/> 
     <input id="ticketID2" type="radio" checked="checked" value="myvalue2" name="ticketID"/> 
    </form> 
    <a href="#" title="Load ActiveChat" id="loadActive">Load Active</a> 

    <script> 
     jQuery("#loadActive").click(function() { 
     //I have other code in here that runs before this function call 
     writeData(); 
     }); 
     function writeData() { 
     jQuery("input[name='ticketID']").each(function(i) { 
      jQuery(this).attr('disabled', 'disabled'); 
     }); 
     } 
    </script> 
    </body> 
</html> 

Tôi đã thử nghiệm trong FF3.5, chuyển sang IE8 ngay bây giờ. Và nó hoạt động tốt trong IE8. Bạn đang dùng trình duyệt nào?

35

Remove của bạn "mỗi" và chỉ sử dụng:

$('input[name=ticketID]').attr("disabled",true); 

Đó đơn giản. Nó hoạt động

+0

Đoạn mã đẹp .. –

2

chỉ cần sử dụng jQuery prop

$(".radio-button").prop("disabled", false); 
$(".radio-button").prop("disabled", true); // disable 
Các vấn đề liên quan