jQuery đặt nút radio


134

Tôi đang cố gắng thiết lập một nút radio. Tôi muốn đặt nó bằng cách sử dụng giá trị hoặc id.

Đây là những gì tôi đã thử.

$('input:radio[name=cols]'+" #"+newcol).attr('checked',true);

newcol là id của nút radio.

Có lẽ một chút chỉnh sửa là theo thứ tự.

Có hai bộ hộp radio một cái có cols và cái còn lại có hàng. Vì vậy, tôi thấy điểm không sử dụng id. Lỗi của tôi. Vì vậy, tôi có một ví dụ:

<input type="radio" name="rows" class="listOfCols" 
   style="width: 50%; " value="Site"></input>

<input type="radio" name="cols" class="listOfCols" 
   style="width: 50%; "  value="Site"></input>

với id đã bị xóa và tôi cần đặt đúng.


Câu trả lời:


196

Bộ chọn của bạn tìm kiếm hậu duệ của một input:radio[name=cols]phần tử có id của newcol(cũng là giá trị của biến đó).

Thay vào đó, hãy thử điều này (vì dù sao bạn cũng chọn bằng ID):

$('#' + newcol).prop('checked',true);

Đây là bản demo: http://jsfiddle.net/jasper/n8CdM/1/

Ngoài ra, kể từ jQuery 1.6, phương thức thay đổi thuộc tính là .prop(): http://api.jquery.com/prop


5
+1 cho propso với attr. attrkhông dùng nữa cho các thuộc tính và không còn hoạt động trong jQuery 2.0))
gavenkoa

87

Tôi đã tìm thấy câu trả lời ở đây:
https://web.archive.org/web/20160421163524/http://vijayt.com/Post/set-RadioButton-value-USE-jQuery

Về cơ bản, nếu bạn muốn kiểm tra một nút radio, bạn PHẢI chuyển giá trị dưới dạng một mảng:

$('input:radio[name=cols]').val(['Site']);
$('input:radio[name=rows]').val(['Site']);

Hello That Link không có nội dung được đề xuất trong đó. Tại sao các bạn cứ từ chối chỉnh sửa của tôi để xóa liên kết. Nó không chứa bất cứ điều gì liên quan đến vấn đề.
Menuka Ishan

@MenukaIshan, quan điểm là: Cung cấp tín dụng. Liên kết có sẵn trong web.archive.org, và người viết nó lần đầu tiên và từ những người tôi nhận được ý tưởng về câu trả lời phải nhận được tín dụng của nó. Đừng xóa liên kết và nếu bạn muốn xem bài đăng gốc, hãy sao chép và dán liên kết (Tôi không biết tại sao nó lại chuyển đến trang cũ thay vì
web.archive.org

2
@Chococroc Bạn chưa cấu hình đúng Markdown của câu hỏi. Tôi thấy phiên bản lưu trữ Web và liên kết nó một cách chính xác. Sau khi xem lại Nó sẽ liên kết chính xác đến trang web.
Menuka Ishan

2
Có vẻ như đây là câu trả lời được chấp nhận vì đây là giải pháp được đề cập trong các tài liệu jQuery
plong0

15

Trong bộ chọn của bạn, bạn dường như đang cố gắng tìm nạp một số phần tử lồng nhau của nút radio với một id đã cho. Nếu bạn muốn kiểm tra nút radio, bạn nên chọn nút radio này trong bộ chọn và không phải cái gì khác:

$('input:radio[name="cols"]').attr('checked', 'checked');

Điều này giả định rằng bạn có nút radio sau trong đánh dấu của mình:

<input type="radio" name="cols" value="1" />

Nếu nút radio của bạn có id:

<input type="radio" name="cols" value="1" id="myradio" />

bạn có thể trực tiếp sử dụng bộ chọn id:

$('#myradio').attr('checked', 'checked');

Nếu có nhiều radio có colstên thì $('input:radio[name="cols"]').attr('checked', 'checked');sẽ chỉ chọn cái cuối cùng. Nó sẽ chạy mã trên mỗi, nhưng mỗi khi bạn đặt thuộc checkedtính, phần tử được đặt trước đó sẽ không được đặt. Đây là bản demo: jsfiddle.net/jasper/n8CdM/2
Jasper

@Jasper, vâng, đó là sự thật. Đó là lý do tại sao tôi đề nghị sử dụng bộ chọn id.
Darin Dimitrov

12

Bạn có thể thử đoạn mã sau:

$("input[name=cols][value=" + value + "]").attr('checked', 'checked');

Điều này sẽ đặt thuộc tính được kiểm tra cho các cột và giá trị theo chỉ định.


1
...the most important concept to remember about the checked attribute is that it does not correspond to the checked property.Nguồn: api.jquery.com/attr
Jasper

10

Tại sao bạn cần 'input:radio[name=cols]'. Không biết html của bạn, nhưng giả sử rằng id là duy nhất, bạn chỉ cần làm điều này.

$('#'+newcol).prop('checked', true);

6

Thử cái này:

$("#" + newcol).attr("checked", "checked");

Tôi đã có vấn đề với attr("checked", true), vì vậy tôi có xu hướng sử dụng ở trên thay thế.

Ngoài ra, nếu bạn có ID thì bạn không cần những thứ khác để lựa chọn. Một ID là duy nhất.


1
prop tốt hơn attr cho những thứ như thế này
RozzA

attr đã biến mất trong jQuery 1.9+ Sử dụng prop.
Mike_Laird

Bạn đúng, nhưng cuối cùng nó phụ thuộc vào tình huống cụ thể của bạn. Nếu mã của bạn sẽ luôn chạy với jQuery 1.6+, thì prop là cách để đi. Nhưng nếu mã của bạn có thể đang chạy trên các phiên bản cũ hơn thì giải pháp không đơn giản như vậy. Ví dụ: tôi duy trì plugin jQuery PickList và chúng tôi hỗ trợ jQuery 1.4+, vì vậy chỉ cần sử dụng prop không phải là một tùy chọn. Đây là một vé mở, vì vậy nếu bạn có bất kỳ đề nghị thanh lịch nào, tôi rất thích nghe chúng; Tôi chưa có thời gian để nghiên cứu.
Gấu Awnry

Vấn đề là ngay cả khi giải pháp của bạn có thể tương thích ngược hơn, đơn giản là nó không hoạt động trong trường hợp này: Chọn A, nó sẽ nhận được checked="checked"thuộc tính mới và trình duyệt sẽ hiển thị dưới dạng đã chọn, sau đó chọn B và điều tương tự sẽ xảy ra. Bây giờ khi bạn chọn A một lần nữa, nó sẽ có checked="checked"thuộc tính và không có gì thay đổi. Vì tác dụng phụ của B mà vẫn sẽ được chọn, chứ không phải A.
Kyborek

2

newcollà ID của nút radio, bạn chỉ cần sử dụng nó như bên dưới.

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

2

Sử dụng .filter()cũng hoạt động và linh hoạt cho id, value, name:

$('input[name="cols"]').filter("[value='Site']").attr('checked', true);

(xem trên blog này )


1
Tôi tin rằng đây là một câu trả lời hợp lệ như nhau, nhưng nó nên sử dụng phương thức prop (): $ ('input [name = "cols"]'). Filter ("[value = 'Site']"). Prop ('đã kiểm tra ', thật);. Người dùng muốn đặt theo "giá trị hoặc id". Có thể đôi khi bạn không muốn đặt giá trị id cho mọi tùy chọn radio, do đó, việc lấy theo tên và lọc theo giá trị là hữu ích.
Zac Imboden

2

Kết hợp các câu trả lời trước:

$('input[name="cols"]').filter("[value='Site']").click();

0

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

$("input[name='cols']").click();

0

Câu trả lời được chọn hoạt động trong trường hợp này.

Nhưng câu hỏi là về việc tìm kiếm phần tử dựa trên radiogroup và id động, và câu trả lời cũng có thể khiến nút radio được hiển thị không bị ảnh hưởng.

Dòng này cũng chọn chính xác những gì được yêu cầu trong khi hiển thị thay đổi trên màn hình.

$('input:radio[name=cols][id='+ newcol +']').click();
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.