Đặt radio đã chọn từ nhóm radio có giá trị


152

Tại sao tôi phải vật lộn với điều này?

Tôi có một giá trị: 5

Làm cách nào để kiểm tra nút radio của nhóm "mygroup" với giá trị là 5?

$("input[name=mygroup]").val(5); // doesn't work?

Câu trả lời:


351

Với sự trợ giúp của bộ chọn thuộc tính, bạn có thể chọn phần tử đầu vào với giá trị tương ứng. Sau đó, bạn phải đặt thuộc tính rõ ràng, sử dụng .attr:

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

Kể từ jQuery 1.6, bạn cũng có thể sử dụng .propphương thức có giá trị boolean (đây phải là phương thức ưa thích):

$("input[name=mygroup][value=" + value + "]").prop('checked', true);

Hãy nhớ rằng trước tiên bạn cần xóa thuộc tính đã chọn khỏi bất kỳ nút radio nào trong một nhóm nút radio sau đó bạn sẽ có thể thêm thuộc tính / thuộc tính được kiểm tra vào một trong các nút radio trong nhóm nút radio đó.

Mã để loại bỏ thuộc tính đã kiểm tra từ tất cả các nút radio của một nhóm nút radio -

$('[name="radioSelectionName"]').removeAttr('checked');

.prop ('đã kiểm tra', đúng) có lẽ tốt hơn hoặc .is ()
bladefist

3
@bladefist: .issẽ không giúp ở đây, nhưng tôi đồng ý với .prop. Nó không có sẵn sau đó;) Sẽ cập nhật câu trả lời của tôi. Cảm ơn!
Felix Kling

4
Nếu giá trị của nút radio có số thập phân, bạn cần đặt giá trị trong dấu ngoặc kép
Robert

1
@Robert: Đúng, có lẽ. Từ tài liệu : "Có thể là một từ đơn không trích dẫn hoặc một chuỗi trích dẫn."
Felix Kling

4
Xem câu trả lời của Jonathan. Các tài liệu jQuery cho thấy .val()hỗ trợ cài đặt các giá trị trên các nhóm radio hoặc hộp kiểm. Câu trả lời này là cách hoạt động về mặt kỹ thuật, nhưng là đường vòng và ít dễ đọc / dễ nhớ hơn nhiều.
jinglểula

143

Có một cách tốt hơn để kiểm tra radio và hộp kiểm; bạn phải truyền một mảng các giá trị cho phương thức val thay vì giá trị thô

Lưu ý: Nếu bạn chỉ đơn giản chuyển giá trị của chính nó (mà không nằm trong một mảng ), điều đó sẽ dẫn đến tất cả các giá trị của "mygroup" được đặt thành giá trị.

$("input[name=mygroup]").val([5]);

Đây là tài liệu jQuery giải thích cách thức hoạt động của nó: http://api.jquery.com/val/#val-value

.val([...])cũng làm việc với các yếu tố hình thức như <input type="checkbox">, <input type="radio">, và <option>là bên trong một <select>.

Các đầu vào và các tùy chọn có giá trị khớp với một trong các phần tử của mảng sẽ được kiểm tra hoặc chọn, trong khi các tùy chọn có giá trị không khớp với một trong các phần tử của mảng sẽ bị bỏ chọn hoặc không được chọn

Fiddle chứng minh điều này hoạt động: https://jsfiddle.net/92nekvp3/


Câu trả lời được chấp nhận (tốt, nên được). Kể từ jQuery 1.0, hãy xem ví dụ cuối cùng từ docs (cuộn xuống dưới cùng): api.jquery.com/val Sao chép tại đây: jsfiddle.net/JoePC/w1f9ykso
JoePC 24/07/18

Đây là một cách hay và nhất quán để đặt tất cả các giá trị đầu vào. Thật tệ, tôi đã mất 6 năm để tìm hiểu về nó.
Jeff Lowery

1
Đã dành khá nhiều thời gian để cố gắng tìm hiểu tại sao tất cả các giá trị của tôi trong nhóm được đặt thành giá trị được chuyển thay vì kiểm tra giá trị. Hóa ra tôi đã truyền giá trị của chính nó, không phải trong một mảng.
OXiGEN



7

Khi bạn thay đổi giá trị thuộc tính như đã đề cập ở trên, changesự kiện không được kích hoạt, vì vậy nếu cần vì một số lý do, bạn có thể kích hoạt nó như vậy

$('input[name=video_radio][value="' + r.data.video_radio + '"]')
       .prop('checked', true)
       .trigger('change');


1

Hoặc bạn chỉ có thể viết thuộc tính giá trị cho nó:

$(':radio[value=<yourvalue>]').attr('checked',true);

Điều này làm việc cho tôi.


0
var key = "Name_radio";
var val = "value_radio";
var rdo = $('*[name="' + key + '"]');
if (rdo.attr('type') == "radio") {
 $.each(rdo, function (keyT, valT){
   if ((valT.value == $.trim(val)) && ($.trim(val) != '') && ($.trim(val) != null))

   {
     $('*[name="' + key + '"][value="' + (val) + '"]').prop('checked', true);
   }
  })
}

4
Bạn có thể vui lòng giải thích những gì mã của bạn làm trong câu trả lời của bạn? Ít nhất là một câu hoặc như vậy. Và làm thế nào nó giải quyết được giải pháp. Cảm ơn bạn.
Alex

0

Phiên bản JavaScript thuần túy:

document.querySelector('input[name="myradio"][value="5"]').checked = true;

-1
$('input[name="mygroup"]').val([5])

1
Bạn có thể giải thích điều gì làm cho giải pháp của bạn khác với các giải pháp khác đã được cung cấp không?
Jacani Vercauteren

@Giovani Vercauteren, chúng ta nên đặt tên dưới dạng chuỗi. Vì vậy, tôi đưa ra nhóm của tôi dưới dạng một chuỗi trong mã.
Anjitha
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.