Cách đặt tùy chọn radio được kiểm tra khi tải với jQuery


297

Làm cách nào để đặt tùy chọn radio được kiểm tra khi tải với jQuery?

Cần kiểm tra nếu không có mặc định nào được đặt và sau đó đặt mặc định


1
@ryenus câu hỏi khác có phải là một bản sao của tôi không vì tôi đã hỏi tôi trước câu hỏi kia?
Phill Pafford 17/03/2017

Câu trả lời:


558

Giả sử bạn có các nút radio như thế này, ví dụ:

<input type='radio' name='gender' value='Male'>
<input type='radio' name='gender' value='Female'>

Và bạn muốn kiểm tra cái có giá trị "Nam" khi tải nếu không có radio nào được kiểm tra:

$(function() {
    var $radios = $('input:radio[name=gender]');
    if($radios.is(':checked') === false) {
        $radios.filter('[value=Male]').prop('checked', true);
    }
});

Chỉ cần tự hỏi, thông số kỹ thuật của IIRC nói rằng thuộc tính được kiểm tra có nghĩa là được kiểm tra = "đã kiểm tra" (mặc dù tôi có thể sai). JQuery có dịch đúng thành 'đã kiểm tra' trong ví dụ này không? Chỉ tò mò thôi ...
alex

8
Ví dụ ban đầu của tôi đã 'kiểm tra', 'kiểm tra', đó là một trong những điều tôi không bao giờ có thể nhớ cái nào đúng. jQuery tìm ra cách nào đó, nhưng tôi biết nếu bạn muốn đặt thuộc tính được kiểm tra thực tế của một phần tử DOM thì nó được coi là boolean, như, document.getEuityById ('x'). Check = true; - vì vậy tôi đã đi với điều đó.
Paolo Bergantino

chỉ muốn thêm ký hiệu dấu ngoặc vuông này [name = giới tính] không hoạt động trong trình duyệt kho của windows phone 7.
最 白

Tôi vừa thử nó với FF và jQuery 1.9.1 và .attr ('đã kiểm tra', đúng); không hoạt động, tuy nhiên .prop ('đã kiểm tra', đúng); làm. nhìn vào stackoverflow.com/questions/4618733/ ' (trùng lặp?)
IARI

Một cách nhanh chóng: KHÔNG sử dụng $radios.removeAttr('checked')trước khi chống đỡ. Nó sẽ gây nhầm lẫn cho trình duyệt và các giá trị được đăng.
igasparetto

109

Làm thế nào về một lót?

$('input:radio[name="gender"]').filter('[value="Male"]').attr('checked', true);

Ở trên là tốt hơn vì nó hỗ trợ các giá trị tên phức tạp hơn.
J. Martin

13
Điều này không trả lời đầy đủ câu hỏi ops - nó cần kiểm tra xem một tùy chọn mặc định đã được kiểm tra trước chưa. Ngoài ra, bây giờ bạn nên sử dụng prop () thay vì attr () cho loại điều này. Để biết giải thích, hãy xem phần "Thuộc tính so với thuộc tính" tại đây: api.jquery.com/prop . Ngoài ra, không cần bộ lọc bổ sung, bạn chỉ cần kết hợp 2 bộ chọn, ví dụ $ ("input [name = male] [value = Male]"). Prop ("đã kiểm tra", true);
jackocnr

3
Giải pháp này hoạt động lần đầu tiên tôi đặt radio nhưng không thành công sau đó. Bằng cách sử dụng "prop" thay vì "attr", nó hoạt động hoàn hảo. Vì vậy: $ ('input: radio [name = "male"]'). Filter ('[value = "Male"]'). Prop ('đã kiểm tra', true);
Andrew

2
Đúng - prop () hiện là phương thức được đề xuất để truy cập các thuộc tính.
Andrew McCombe

1
Đơn giản hơn: $ ('đầu vào: radio [name = "male"] [value = "Male"]'). Attr ('đã kiểm tra', đúng);
Régis

52

Điều này sẽ gây ra lỗi form.reset ():

$('input:radio[name=gender][value=Male]').attr('checked', true);

Nhưng cái này hoạt động:

$('input:radio[name=gender][value=Male]').click();

5
Tôi sẽ khuyên bạn nên sử dụng trình kích hoạt ('click') dễ đọc hơn và dừng cuộc gọi phương thức.
Barkermn01

35

JQuery thực sự có hai cách để đặt trạng thái được kiểm tra cho radio và các hộp kiểm và nó phụ thuộc vào việc bạn có đang sử dụng thuộc tính value trong đánh dấu HTML hay không:

Nếu họ có thuộc tính giá trị:

$("[name=myRadio]").val(["myValue"]);

Nếu họ không có thuộc tính giá trị:

$("#myRadio1").prop("checked", true);

Thêm chi tiết

Trong trường hợp đầu tiên, chúng tôi chỉ định toàn bộ nhóm radio sử dụng tên và báo cho JQuery tìm đài để chọn sử dụng hàm val. Hàm val lấy mảng 1 phần tử và tìm đài có giá trị khớp, đặt giá trị được kiểm tra = true. Những người khác có cùng tên sẽ được bỏ chọn. Nếu không có đài phát thanh nào có giá trị phù hợp được tìm thấy thì tất cả sẽ được bỏ chọn. Nếu có nhiều radio có cùng tên và giá trị thì cái cuối cùng sẽ được chọn và những cái khác sẽ được bỏ chọn.

Nếu bạn không sử dụng thuộc tính value cho radio thì bạn cần sử dụng ID duy nhất để chọn radio cụ thể trong nhóm. Trong trường hợp này, bạn cần sử dụng chức năng chống đỡ để đặt thuộc tính "đã kiểm tra". Nhiều người không sử dụng thuộc tính giá trị với các hộp kiểm, vì vậy # 2 được áp dụng nhiều hơn cho các hộp kiểm sau đó là radio. Cũng lưu ý rằng vì các hộp kiểm không tạo thành nhóm khi chúng có cùng tên, bạn có thể làm $("[name=myCheckBox").prop("checked", true);cho các hộp kiểm.

Bạn có thể chơi với mã này tại đây: http://jsbin.com/OSULAtu/1/edit?html,output


22

Tôi thích câu trả lời của @Amc. Tôi thấy biểu thức có thể được cô đọng hơn nữa để không sử dụng lệnh gọi bộ lọc () (@chaiko rõ ràng cũng nhận thấy điều này). Ngoài ra, prop () là cách để đi so với attr () cho jQuery v1.6 +, xem tài liệu jQuery cho prop () để biết các thực tiễn tốt nhất chính thức về chủ đề này.

Hãy xem xét các thẻ đầu vào tương tự từ câu trả lời của @Paolo Bergantino.

<input type='radio' name='gender' value='Male'>
<input type='radio' name='gender' value='Female'>

Một lớp lót được cập nhật có thể đọc một cái gì đó như:

$('input:radio[name="gender"][value="Male"]').prop('checked', true);

15

Tôi nghĩ bạn có thể giả sử, tên đó là duy nhất và tất cả các đài trong nhóm đều có cùng tên. Sau đó, bạn có thể sử dụng hỗ trợ jQuery như thế:

$("[name=gender]").val(["Male"]);

Lưu ý: Vượt qua mảng là quan trọng.

Phiên bản có điều kiện:

if (!$("[name=gender]:checked").length) {
    $("[name=gender]").val(["Male"]);
}

1
Điều này thật tệ khi bạn quét mọi yếu tố cho một giá trị mà tôi không khuyên bạn nên sử dụng nó bao giờ
Barkermn01

@MartinBarker bạn có thể giải thích những gì bạn nam bằng cách 'quét'?
Saram

Tìm kiếm DOM, nếu bạn không sử dụng gì ngoài một thuộc tính mà buộc jQuery phải sử dụng mặc dù mọi phần tử trong DOM và kiểm tra xem có khớp với nhau không nếu bạn sử dụng $("*")nó sẽ khớp với mọi thứ vì vậy bạn nên sử dụng một loại cho thuê $("input")hoặc ID sẽ trở nên lý tưởng vì DOM có các lệnh gọi riêng để lấy phần tử theo id
Barkermn01

@MartinBarker - Tôi đồng ý. Thông thường tôi chọn bộ tiền tố với id mẫu hoặc cung cấp thông số ngữ cảnh. Hiện tại quét DOM không phải là nỗ lực của jQuery mà là công cụ trình duyệt nội bộ, document.querySelectorAlllàm cho tất cả công việc.
Saram

Để giải quyết các mối quan tâm ở trên, hãy sử dụng $("input[name=gender]")hoặc $("input[name=gender]:radio")hoặc (đối với các trình duyệt hiện đại)$("input[name=gender][type=radio]")
David Balažic

7

Nếu bạn muốn nó thực sự năng động và chọn radio tương ứng với dữ liệu đến, điều này sẽ hoạt động. Đó là sử dụng giá trị giới tính của dữ liệu được truyền vào hoặc sử dụng mặc định.

if(data['gender'] == ''){
 $('input:radio[name="gender"][value="Male"]').prop('checked', true);
}else{
  $('input:radio[name="gender"][value="' + data['gender'] +'"]').prop('checked', true);
};

5

Giải pháp JS gốc:

 document.querySelector('input[name=gender][value=Female]').checked = true;

http://jsfiddle.net/jzQvH/75/

HTML:

<input type='radio' name='gender' value='Male'> Male
<input type='radio' name='gender' value='Female'>Female

3

Và nếu bạn muốn chuyển một giá trị từ mô hình của mình và muốn chọn nút radio từ nhóm khi tải dựa trên giá trị, hơn là sử dụng:

Câu hỏi:

var priority = Model.Priority; //coming for razor model in this case
var allInputIds = "#slider-vertical-" + itemIndex + " fieldset input";

$(allInputIds).val([priority]); //Select at start up

Và html:

<div id="@("slider-vertical-"+Model.Id)">
 <fieldset data-role="controlgroup" data-type="horizontal" data-mini="true">
    <input type="radio" name="@("radio-choice-b-"+Model.Id)" id="@("high-"+Model.Id)" value="1" checked="checked">
    <label for="@("high-"+Model.Id)" style="width:100px">@UIStrings.PriorityHighText</label>

    <input type="radio" name="@("radio-choice-b-"+Model.Id)" id="@("medium-"+Model.Id)" value="2">
    <label for="@("medium-"+Model.Id)" style="width:100px">@UIStrings.PriorityMediumText</label>

    <input type="radio" name="@("radio-choice-b-"+Model.Id)" id="@("low-"+Model.Id)" value="3">
    <label for="@("low-"+Model.Id)" style="width:100px">@UIStrings.PriorityLowText</label>
 </fieldset>
</div>

2

Đừng cần tất cả những thứ đó. Với HTML đơn giản và cũ, bạn có thể đạt được những gì bạn muốn. Nếu bạn để radio bạn muốn kiểm tra theo mặc định như thế này:
<input type='radio' name='gender' checked='true' value='Male'>
Khi tải trang, nó sẽ được kiểm tra.


3
có nhưng tôi cần nó phải năng động vì trang web giới thiệu sẽ vượt qua mặc định khi tải trang. Đã được một thời gian kể từ khi tôi nghĩ về câu hỏi này vì vậy tôi hy vọng tôi hiểu những gì bạn đang cố gắng nói
Phill Pafford

2
 $("form input:[name=gender]").filter('[value=Male]').attr('checked', true);

6
Xin vui lòng không đăng câu trả lời chỉ mã. Xin hãy giải thích quá.
Lee Taylor

2

Dưới đây là ví dụ với các phương pháp trên:

<div class="ui-field-contain">
<fieldset data-role="controlgroup" data-type="horizontal">    <legend>Choose a pet:</legend>
    <input type="radio" name="radio-choice-2" id="radio-choice-1" value="choice1">
    <label for="radio-choice-1">Cat</label>

    <input type="radio" name="radio-choice-2" id="radio-choice-2" value="choice2">
    <label for="radio-choice-2">Dog</label>

    <input type="radio" name="radio-choice-2" id="radio-choice-3" value="choice3">
    <label for="radio-choice-3">Hamster</label>

    <input type="radio" name="radio-choice-2" id="radio-choice-4" value="choice4">
    <label for="radio-choice-4">Lizard</label>
  </fieldset>
</div>

Trong javascript:

$("[name = 'radio-choice-2'][value='choice3']").prop('checked', true).checkboxradio('refresh');

1

Lưu ý hành vi này khi nhận các giá trị đầu vào radio:

$('input[name="myRadio"]').change(function(e) { // Select the radio input group

    // This returns the value of the checked radio button
    // which triggered the event.
    console.log( $(this).val() ); 

    // but this will return the first radio button's value,
    // regardless of checked state of the radio group.
    console.log( $('input[name="myRadio"]').val() ); 

});

Vì vậy, $('input[name="myRadio"]').val()không trả về giá trị đã kiểm tra của đầu vào radio, như bạn mong đợi - nó sẽ trả về giá trị của nút radio đầu tiên.


1

De esta forma Jquery obtiene solo el Elemento đã kiểm tra

$('input[name="radioInline"]:checked').val()

2
Bạn cần mô tả câu trả lời và định dạng mã của mình
Michael

0

// Nếu bạn đang làm nó trên javascript hoặc một khung như xương sống, bạn sẽ gặp điều này rất nhiều, bạn có thể có một cái gì đó như thế này

$MobileRadio = $( '#mobileUrlRadio' );

trong khi

$MobileRadio.checked = true;

sẽ không làm việc,

$MobileRadio[0].checked = true;

sẽ.

bộ chọn của bạn có thể được như những người khác ở trên đề nghị quá.


0

Điều này hoạt động cho nhiều nút radio

$('input:radio[name="Aspirant.Gender"][value='+jsonData.Gender+']').prop('checked', true);
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.