ค้นหาว่ามีการตรวจสอบปุ่มตัวเลือกด้วย JQuery หรือไม่


584

ฉันสามารถตั้งค่าปุ่มตัวเลือกให้ตรวจสอบได้ดี แต่สิ่งที่ฉันต้องการทำคือตั้งค่า 'ผู้ฟัง' ที่เปิดใช้งานเมื่อมีการตรวจสอบปุ่มตัวเลือก

รับตัวอย่างรหัสต่อไปนี้:

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

มันเพิ่มคุณสมบัติที่เลือกและทุกอย่างดี แต่ฉันจะเพิ่มการแจ้งเตือนได้อย่างไร ตัวอย่างเช่นที่ปรากฏขึ้นเมื่อเลือกปุ่มตัวเลือกโดยไม่ใช้ฟังก์ชั่นคลิก?



1
Monitoring when a radio button is unchecked stackoverflow.com/questions/5824639/…
Adrien Be

คำตอบ:


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

บิงโก! ขอบคุณเดวิด ดังนั้นฉันต้องเรียกใช้การกระทำ (คลิก ฯลฯ ) เพื่อแสดงการแจ้งเตือนหรือไม่ มีวิธีทำโดยไม่คลิกหรือไม่
Keith Donegan

3
สิ่งนี้ไม่ได้แก้ปัญหา "โดยไม่ต้องใช้ฟังก์ชั่นคลิก" ใช่ไหม?
Znarkus

5
@Znarkus: OP พอใจแล้ว คุณจะยืนยันว่าคุณเป็นเจ้าของ('#radio_button').clickโดยไม่ใช้click?
David Hedlund

3
@David บรรทัดที่สองควรเป็นif ($('#radio_button').is(':checked'))) { alert("it's checked"); }- คุณลืมเครื่องหมาย jQuery $ จากนั้นจำเป็นต้องใส่ทุกอย่างไว้ในวงเล็บ
zuallauz

2
@zua: ถูกต้อง! มันยังมีข้อผิดพลาดทางไวยากรณ์เช่นเดิม (วงเล็บที่ไม่ตรงกัน) คงที่
David Hedlund

154

หากคุณมีกลุ่มของปุ่มตัวเลือกที่ใช้แอตทริบิวต์ชื่อเดียวกันและเมื่อส่งหรือเหตุการณ์ที่คุณต้องการตรวจสอบว่ามีการเลือกปุ่มตัวเลือกเหล่านี้คุณสามารถทำได้โดยการใช้รหัสต่อไปนี้:

$(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!');
    }
  });
});

แหล่ง

การอ้างอิง jQuery API


สิ่งนี้ไม่ได้ผลสำหรับฉัน หากฉันแจ้งเตือน ($ ("อินพุต [@ name = 'shipping_method']: ทำเครื่องหมายไว้"). val ()); มันยังให้คุณค่าแก่ฉันแม้ว่าจะไม่ได้เลือกปุ่มตัวเลือก
AndrewC

1
หมายเหตุ: หากคุณมีหลายรูปแบบที่มีกลุ่มของปุ่มตัวเลือกโดยใช้ชื่อเดียวกันคุณต้องตรวจสอบให้แน่ใจว่าได้ตรวจสอบเฉพาะรูปแบบที่ส่งมา ทางเลือกหนึ่งในการทำเช่นนี้คือการใช้วิธีการค้นหาในแบบฟอร์ม:$('#myform').submit(function(event){ if (!$(this).find("input[name='name']:checked").val()) {
Benjamin

41

เมื่อทางออกของ Parag เกิดข้อผิดพลาดสำหรับฉันนี่คือวิธีแก้ไขปัญหาของฉัน (รวม David Hedlund's และ Parag's):

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

มันใช้งานได้ดีสำหรับฉัน!


32

คุณต้องผูกเหตุการณ์คลิกของช่องทำเครื่องหมายเนื่องจากเหตุการณ์การเปลี่ยนแปลงไม่ทำงานใน IE

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

ตอนนี้เมื่อคุณเปลี่ยนสถานะโดยทางโปรแกรมคุณต้องทริกเกอร์เหตุการณ์นี้ด้วย:

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

18

// ตรวจสอบผ่านชั้นเรียน

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

// ตรวจสอบชื่อ

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

// ตรวจสอบข้อมูล

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

10

อีกวิธีคือการใช้(jQuery> = 1.6) :prop

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

แน่นอน.prop()เร็วกว่ามากและง่ายต่อการพิมพ์
Marc.2377

10

การแก้ปัญหาจะง่ายเพียงคุณต้อง 'ฟัง' เมื่อมีการเลือกปุ่มตัวเลือก ทำมัน :-

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

6

หากคุณไม่ต้องการฟังก์ชั่นคลิกให้ใช้ฟังก์ชั่นเปลี่ยน Jquery

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

นี่ควรเป็นคำตอบที่คุณกำลังมองหา หากคุณกำลังใช้รุ่น Jquery ด้านบน 1.9.1 ลองใช้ในขณะที่ฟังก์ชั่นถ่ายทอดสดได้เลิกใช้แล้ว


6

... ขอบคุณพวก ... ทั้งหมดที่ฉันต้องการก็คือ 'คุณค่า' ของปุ่มตัวเลือกที่เลือกซึ่งปุ่มตัวเลือกแต่ละตัวในชุดมีรหัสที่แตกต่างกัน ...

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

เหมาะกับฉัน ...


คำตอบที่มีประโยชน์ที่สุด
amal50


3

ปุ่มเรดิโอที่สร้างแบบไดนามิกตรวจสอบค่าการรับวิทยุ

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

เมื่อเปลี่ยนปุ่มตัวเลือกแบบไดนามิก

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

3

$ ('. radio-button-class-name'). คือ ('ตรวจสอบ') ไม่ทำงานสำหรับฉัน แต่รหัสถัดไปทำงานได้ดี:

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

1
เนื่องจากคุณใช้มันกับคลาสแทนที่จะเป็น ID มันจะส่งคืน nodelist แทนองค์ประกอบ $('.radio-button-class-name').first().is(':checked')ควรจะทำงาน
Levi Johansen



0

jQuery ยังคงเป็นที่นิยม แต่ถ้าคุณต้องการไม่มีการพึ่งพาดูด้านล่าง ฟังก์ชั่นสั้นและชัดเจนเพื่อตรวจสอบว่ามีการตรวจสอบปุ่มตัวเลือกใน ES-2015 หรือไม่:

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);

สำหรับเวอร์ชันของ jQuery ก่อนหน้า 1.6 ให้ใช้:

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

2
สิ่งนี้ตั้งค่าของcheckedคุณสมบัติแทนการสืบค้น
Marc.2377
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.