Tìm hiểu xem nút radio có được kiểm tra bằng JQuery không?


584

Tôi có thể đặt nút radio để kiểm tra tốt, nhưng điều tôi muốn làm là thiết lập một loại 'người nghe' kích hoạt khi một nút radio nhất định được chọn.

Lấy ví dụ mã sau:

$("#element").click(function()
{ 
    $('#radio_button').attr("checked", "checked");
});

nó thêm một thuộc tính được kiểm tra và tất cả đều tốt, nhưng tôi sẽ làm thế nào để thêm cảnh báo. Ví dụ, cửa sổ bật lên khi nút radio được kiểm tra mà không có sự trợ giúp của chức năng nhấp?



1
liên quan Monitoring when a radio button is unchecked stackoverflow.com/questions/5824639/ hy
Adrien Be

Câu trả lời:


1082
$('#element').click(function() {
   if($('#radio_button').is(':checked')) { alert("it's checked"); }
});

Chơi lô tô! cảm ơn David Vì vậy, tôi sẽ phải gọi một hành động (nhấp vào vv) để hiển thị cảnh báo? Có cách nào để làm điều này mà không cần nhấp vào?
Keith Donegan

3
Điều này không giải quyết được "không có sự trợ giúp của chức năng nhấp chuột", phải không?
Znarkus

5
@Znarkus: OP có vẻ hài lòng. bạn sẽ tranh luận rằng bạn sử dụng ('#radio_button').clicklà không có click?
David Hedlund

3
@David Dòng thứ hai sẽ là if ($('#radio_button').is(':checked'))) { alert("it's checked"); }- bạn đã quên ký hiệu jQuery $ và sau đó cần phải bọc tất cả trong một số dấu ngoặc đơn nữa.
zuallauz

2
@zua: bạn nói đúng! nó thậm chí còn có một lỗi cú pháp, như trước đây (dấu ngoặc không khớp). đã sửa
David Hedlund

154

Nếu bạn có một nhóm các nút radio chia sẻ cùng một thuộc tính tên và khi gửi hoặc một số sự kiện bạn muốn kiểm tra xem một trong các nút radio này có được kiểm tra hay không, bạn có thể thực hiện việc này đơn giản bằng mã sau:

$(document).ready(function(){
  $('#submit_button').click(function() {
    if (!$("input[name='name']:checked").val()) {
       alert('Nothing is checked!');
        return false;
    }
    else {
      alert('One of the radio buttons is checked!');
    }
  });
});

Nguồn

Tham khảo API jQuery


Điều này đã không làm việc cho tôi. Nếu tôi cảnh báo ($ ("input [@ name = 'Shipping_method']: đã kiểm tra"). Val ()); nó vẫn cho tôi giá trị ngay cả khi nút radio không được chọn.
AndrewC

1
Lưu ý: Nếu bạn có một số biểu mẫu với các nhóm nút radio sử dụng cùng tên, bạn cần đảm bảo chỉ kiểm tra các biểu mẫu được gửi. Một tùy chọn để thực hiện việc này là sử dụng phương thức find trên biểu mẫu: $('#myform').submit(function(event){ if (!$(this).find("input[name='name']:checked").val()) {
Benjamin

41

Vì giải pháp của Parag đã gây ra lỗi cho tôi, đây là giải pháp của tôi (kết hợp giữa David Hedlund và Parag):

if (!$("input[name='name']").is(':checked')) {
   alert('Nothing is checked!');
}
else {
   alert('One of the radio buttons is checked!');
}

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


32

Bạn sẽ phải liên kết sự kiện nhấp của hộp kiểm, vì sự kiện thay đổi không hoạt động trong IE.

$('#radio_button').click(function(){
    // if ($(this).is(':checked')) alert('is checked'); 
    alert('check-checky-check was changed');
});

Bây giờ khi bạn thay đổi trạng thái theo chương trình, bạn cũng phải kích hoạt sự kiện này:

$('#radio_button').attr("checked", "checked");
$('#radio_button').click();

18

// Kiểm tra qua lớp

if($("input:radio[class='className']").is(":checked")) {
     //write your code         
}

// Kiểm tra tên

if($("input:radio[name='Name']").is(":checked")) {
         //write your code         
}

// Kiểm tra thông qua dữ liệu

if($("input:radio[data-name='value']").is(":checked")) {
         //write your code         
}

10

Một cách khác là sử dụng (jQuery> = 1.6) :prop

$("input[type=radio]").click(function () {
    if($(this).prop("checked")) { alert("checked!"); }
});

Quả thực .prop()là nhanh hơn nhiều, và đơn giản là dễ gõ hơn.
Marc.2377

10

Giải pháp sẽ đơn giản, vì bạn chỉ cần 'người nghe' khi kiểm tra một nút radio nhất định. Làm đi :-

if($('#yourRadioButtonId').is(':checked')){ 
// Do your listener's stuff here. 
}

6

Nếu bạn không muốn có chức năng nhấp, hãy sử dụng chức năng thay đổi Jquery

$('#radio_button :checked').live('change',function(){
alert('Something is checked.');
});

Đây sẽ là câu trả lời mà bạn đang tìm kiếm. nếu bạn đang sử dụng phiên bản Jquery trên 1.9.1, hãy thử sử dụng vì chức năng trực tiếp không được dùng nữa.


6

... Cảm ơn các bạn ... tất cả những gì tôi cần là 'giá trị' của nút radio được kiểm tra trong đó mỗi nút radio trong bộ có một id khác nhau ...

 var user_cat = $("input[name='user_cat']:checked").val();

làm việc cho tôi ...


Câu trả lời hữu ích nhất
amal50


3

Nút radio được tạo động Kiểm tra giá trị radio

$("input:radio[name=radiobuttonname:checked").val();

Khi thay đổi nút Radio động

$('input[name^="radioname"]').change(function () {if (this.value == 2) { }else{}});

3

$ ('. radio-button-class-name'). là ('đã kiểm tra') không hoạt động với tôi, nhưng mã tiếp theo hoạt động tốt:

    if(typeof $('.radio-button-class-name:checked').val() !== 'undefined'){
     // radio button is checked
    }

1
Vì bạn đã sử dụng nó với một lớp thay vì ID, nên nó sẽ trả về một nút, thay vì một phần tử. $('.radio-button-class-name').first().is(':checked')nên đã làm việc
Levi Johansen

2

thử cái này

    if($('input[name="radiobutton"]:checked').length == 0) {
        alert("Radio buttons are not checked");
    }


0

jQuery vẫn phổ biến, nhưng nếu bạn muốn không có phụ thuộc, hãy xem bên dưới. Chức năng ngắn & rõ ràng để tìm hiểu xem nút radio có được kiểm tra trên ES-2015 không:

function getValueFromRadioButton( name ){
  return [...document.getElementsByName(name)]
         .reduce( (rez, btn) => (btn.checked ? btn.value : rez), null)
}

console.log( getValueFromRadioButton('payment') );
<div>  
  <input type="radio" name="payment" value="offline">
  <input type="radio" name="payment" value="online">
  <input type="radio" name="payment" value="part" checked>
  <input type="radio" name="payment" value="free">
</div>


-3
$("#radio_1").prop("checked", true);

Đối với các phiên bản jQuery trước 1.6, hãy sử dụng:

$("#radio_1").attr('checked', 'checked');

2
Điều này đặt giá trị của checkedtài sản, thay vì truy vấn nó.
Marc.2377
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.