ใน jQuery ฉันจะเลือกองค์ประกอบด้วยแอตทริบิวต์ชื่อได้อย่างไร


328

ฉันมีปุ่มตัวเลือก 3 ปุ่มในหน้าเว็บของฉันเช่นด้านล่าง:

<label for="theme-grey">
  <input type="radio" id="theme-grey" name="theme" value="grey" />Grey</label>
<label for="theme-pink">
  <input type="radio" id="theme-pink" name="theme" value="pink" />Pink</label>
<label for="theme-green">
  <input type="radio" id="theme-green" name="theme" value="green" />Green</label>

ใน jQuery ฉันต้องการรับค่าของปุ่มตัวเลือกที่เลือกเมื่อมีการคลิกปุ่มใดปุ่มหนึ่งเหล่านี้ ใน jQuery เรามี id (#) และตัวเลือก class (.) แต่ถ้าฉันต้องการหาปุ่มตัวเลือกโดยใช้ชื่อดังต่อไปนี้

$("<radiobutton name attribute>").click(function(){});

โปรดบอกวิธีแก้ปัญหานี้


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

2
jQuery 1.8 ขึ้นไปมีการเปลี่ยนแปลงนี้ .... ฉันได้เพิ่มคำตอบด้านล่างเพื่ออธิบาย
Kevin LaBranche

3
คำตอบที่ดีที่สุดของ A1rPun : ไม่ใช่ jQuery แบบหนึ่งต่อหนึ่ง!
Rudey

1
ใช้ปุ่มตัวเลือกเพื่อรักษาสถานะในแอป js ของฉัน แก้จุดบกพร่องได้ดีหนึ่งชั่วโมงก่อนที่จะตรวจสอบหัวข้อนี้ ตรวจสอบนี้
Prasanth

ในแบบธรรมดา JS:document.querySelectorAll("input:radio[name=theme]").forEach(function() { this.onclick=function() { var value = this.value; }; });
mplungjan

คำตอบ:


339

สิ่งนี้ควรทำทั้งหมดนี้อยู่ในเอกสารซึ่งมีตัวอย่างที่คล้ายคลึงกันนี้:

$("input[type='radio'][name='theme']").click(function() {
    var value = $(this).val();
});

ฉันควรทราบว่าคุณมีรหัสที่เหมือนกันหลายรายการในตัวอย่างนั้น นี่คือ HTML ที่ไม่ถูกต้อง ใช้คลาสเพื่อชุดกลุ่มขององค์ประกอบไม่ใช่ ID เนื่องจากควรเป็นเอกลักษณ์


4
@gargantaun - หากคุณคลิกปุ่มตัวเลือกจะเกิดอะไรขึ้นกับมัน
เปาโลเบอร์กันติโน

11
จุดดี. แม้ว่าจะยังไม่ "วิธีรับค่า radiobutton ที่เลือกโดยใช้ชื่อใน jQuery" มันคือ "วิธีการรับค่า radiobutton ที่เลือกเมื่อคลิกที่มันโดยใช้ jQuery" ความแตกต่างเล็กน้อย แต่สิ่งที่ทำให้ฉันงุนงงเล็กน้อย
gargantuan

1
ตามคำถามคำตอบนี้ถูกต้อง ในมุมมองทั่วโลกเราจะไปหาคำตอบของเคลย์ตัน
Krish

8
ตั้งแต่ jQuery 1.8 ใช้[type='radio']แทน:radioวิธีนั้น jQuery สามารถใช้ประโยชน์จากการเพิ่มประสิทธิภาพที่จัดทำโดยquerySelectorAll()วิธีDOM ดั้งเดิม
อดัม

2
@PaoloBergantino คำตอบถูกต้อง 100% เพราะมันคืนค่าหลังจากคลิกปุ่มตัวเลือกที่ต้องการ @ Clayton Rabenda คำตอบไม่ได้ให้สิ่งนี้
Azam Alvi

185

หากต้องการพิจารณาว่าเลือกตัวเลือกใดให้ลองทำดังนี้:

$('input:radio[name=theme]').click(function() {
  var val = $('input:radio[name=theme]:checked').val();
});

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

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


3
ฐานสวมวิธีที่ฉันอ่านคำถามนี่คือคำตอบที่ฉันต้องการ : ถูกตรวจสอบเป็นสิ่งที่ฉันขาดหายไปในสมการของฉัน ขอบคุณ
HPWD

9
ตั้งแต่ jQuery 1.8 ใช้[type='radio']แทน:radioวิธีนั้น jQuery สามารถใช้ประโยชน์จากการเพิ่มประสิทธิภาพที่จัดทำโดยquerySelectorAll()วิธีDOM ดั้งเดิม
อดัม

ฉันให้พื้นที่หลังลำไส้ใหญ่และก่อน "ตรวจสอบ" โดยไม่ได้ตั้งใจ ดังนั้นโปรดตรวจสอบให้แน่ใจว่าไม่มีที่ว่าง
ลิงสูบบุหรี่

คำตอบที่เป็นประโยชน์สำหรับผู้ที่ไม่ต้องการรับค่าจากตัวจัดการเหตุการณ์คลิก มิฉะนั้นคุณต้องใช้:checkedเพื่อค้นหาปุ่มที่เลือกตัวอย่างเช่นด้วยแบบฟอร์มส่งตัวจัดการเหตุการณ์ที่thisคำหลักไม่จับคู่กับปุ่มที่คลิก
che-azeh

155
$('input:radio[name=theme]:checked').val();

ฉันออกไปอย่างง่ายดายด้วย$("input[name=theme]:checked").val();(ออกจาก:radioส่วนและดูเหมือนว่าจะทำงานได้ดีใน IE, FF, Safari และ Chrome ฉันต้องทำงานกับ jQ v 1.3 ... แน่นอนนั่นหมายความว่ามีองค์ประกอบเดียวที่มีชื่อว่า 'ธีม'
morespace54

2
นี่คือคำตอบที่ดีที่สุดของ IMO มันบอกว่า "ให้คุณค่าของวิทยุที่ถูกตรวจสอบด้วยชื่อนี้" ไม่จำเป็นต้องมีกิจกรรม ฯลฯ
ProVega

39

อีกวิธีหนึ่ง

$('input:radio[name=theme]').filter(":checked").val()

1
อันนี้มีประโยชน์ถ้าคุณสนใจที่จะคว้าค่า +1
swapnesh

นี่คือที่มั่นคงเพราะคุณสามารถใช้ตัวแปรเพื่อให้ปุ่มเช่น$themeRadios = $('input:radio[name=theme'])การตั้งค่าตัวจัดการเหตุการณ์ใด ๆ $themeRadios.filter(":checked").val()แล้วได้รับค่าโดยใช้ตัวกรองเช่น
Joshua Pinter

ฉันรักทางออกนี้
อาเบล

20

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

$valueOfTheCheckedRadio = $('[name=radioName]:checked').val();

เหตุผลที่คำตอบนี้ดีกว่าคำตอบที่ได้รับการโหวตมากกว่า 230+ ที่เป็นที่ยอมรับในปัจจุบันคือเพราะคำตอบนี้ยังคำนึงถึงเมื่อผู้ใช้โต้ตอบกับปุ่มตัวเลือกด้วยคีย์บอร์ด
gmeben

16

รหัสต่อไปนี้ใช้เพื่อรับค่าปุ่มตัวเลือกตามชื่อ

jQuery("input:radio[name=theme]:checked").val();

ขอบคุณ Adnan


อืม .. ฉันไม่ได้แก้ไขการจัดรูปแบบโค้ดของคุณในการตอบครั้งสุดท้ายใช่ไหม โปรดดูแลด้วยตัวคุณเอง :-)
kleopatra

13

ฉันพบคำถามนี้เมื่อฉันทำการวิจัยข้อผิดพลาดหลังจากฉันอัพเกรดจาก 1.7.2 จาก jQuery เป็น 1.8.2 ฉันกำลังเพิ่มคำตอบของฉันเพราะมีการเปลี่ยนแปลงใน jQuery 1.8 และสูงกว่าที่เปลี่ยนแปลงวิธีการตอบคำถามนี้ตอนนี้

ด้วย jQuery 1.8 พวกเขาเลิกคัดกรอง pseudo-like เช่น: radio,: checkbox,: text

การทำข้างต้นขณะนี้เป็นเพียงแทนที่ด้วย:radio[type=radio]

ดังนั้นคำตอบของคุณจะกลายเป็น jQuery 1.8 ขึ้นไปทุกเวอร์ชัน

$("input[type=radio][name=theme]").click(function() { 
    var value = $(this).val(); 
}); 

คุณสามารถอ่านเกี่ยวกับการเปลี่ยนแปลงใน 1.8 readmeและตั๋วเฉพาะสำหรับการเปลี่ยนแปลงนี้รวมทั้งทำความเข้าใจว่าทำไมในหน้า: ตัวเลือกตัวเลือกวิทยุภายใต้ส่วนข้อมูลเพิ่มเติม


5
: การตรวจสอบไม่ได้คัดค้าน ดังนั้นคุณสามารถใช้$("input[type='radio'][name='theme']:checked")
Adam

12

สำหรับใครก็ตามที่ไม่ต้องการรวมห้องสมุดเพื่อทำสิ่งที่ง่ายจริงๆ:

document.querySelector('[name="theme"]:checked').value;

jsfiddle

สำหรับภาพรวมประสิทธิภาพของคำตอบปัจจุบันตรวจสอบที่นี่


1
ขอบคุณสำหรับคำตอบนี้ เพราะฉันไม่สามารถรับคำตอบที่ได้รับการยอมรับในการทำงานในรูปแบบใด ๆ
Chris Holmes

9

หากคุณต้องการทราบมูลค่าของปุ่มตัวเลือกเริ่มต้นก่อนเหตุการณ์คลิกให้ลอง:

การแจ้งเตือน ($ ( "การป้อนข้อมูล: วิทยุการตรวจสอบ".) Val ());

6

คุณสามารถใช้ฟังก์ชั่นตัวกรองหากคุณมีกลุ่มวิทยุมากกว่าหนึ่งกลุ่มในหน้าดังต่อไปนี้

$('input[type=radio]').change(function(){
    var value = $(this).filter(':checked' ).val();
    alert(value);
});

นี่คือไวโอลินซอ

http://jsfiddle.net/h6ye7/67/


4
<input type="radio" name="ans3" value="help"> 
<input type="radio" name="ans3" value="help1">
<input type="radio" name="ans3" value="help2">

<input type="radio" name="ans2" value="test"> 
<input type="radio" name="ans2" value="test1">
<input type="radio" name="ans2" value="test2">

<script type="text/javascript">
  var ans3 = jq("input[name='ans3']:checked").val()
  var ans2 = jq("input[name='ans2']:checked").val()
</script>

4

หากคุณต้องการค่าจริง / เท็จใช้สิ่งนี้:

  $("input:radio[name=theme]").is(":checked")

3

อย่างนี้อาจจะ?

$("input:radio[name=theme]").click(function() { 
 ...
}); 

เมื่อคุณคลิกปุ่มตัวเลือกใด ๆ ฉันเชื่อว่ามันจะจบลงด้วยการเลือกดังนั้นสิ่งนี้จะถูกเรียกสำหรับปุ่มตัวเลือกที่เลือก


1
The @ ไม่ถูกต้องตั้งแต่ jQuery 1.3 (คัดค้านก่อนหน้านั้นแม้) blog.jquery.com/2009/01/05/help-test-jquery-13-beta-2 "ตัวเลือกคุณลักษณะของรูปแบบเก่า XPath: [@ attr = value] สิ่งเหล่านี้ถูกคัดค้านมาระยะหนึ่ง - และเรา ในที่สุดก็ลบพวกเขาในการแก้ไขมันเพียงแค่ลบ @! "
racerror

3

ฉันมีปุ่มตัวเลือกมากกว่าหนึ่งกลุ่มในหน้าเดียวกันคุณสามารถลองใช้เพื่อรับค่าของปุ่มตัวเลือก:

$("input:radio[type=radio]").click(function() {
    var value = $(this).val();
    alert(value);
});

ไชโย!


2

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

$('.radio_check:checked').val()

1

สิ่งนี้ได้ผลสำหรับฉัน ..

HTML:

<input type="radio" class="radioClass" name="radioName" value="1" />Test<br/>
<input type="radio" class="radioClass" name="radioName" value="2" />Practice<br/>
<input type="radio" class="radioClass" name="radioName" value="3" />Both<br/>

jquery:

    $ (". radioClass"). แต่ละอัน (function () {
        ถ้า ($ (นี้) .is ( 'ตรวจสอบ'))
        การแจ้งเตือน ($ (นี้) .val ());
    });

หวังว่ามันจะช่วย ..



0

คุณอาจสังเกตว่าการใช้ตัวเลือกคลาสเพื่อรับค่าASP.NET RadioButtonการควบคุมว่างเปล่าเสมอและนี่คือเหตุผล

คุณสร้างRadioButtonการควบคุมในASP.NETด้านล่าง:

<asp:RadioButton runat="server" ID="rbSingle" GroupName="Type" CssClass="radios" Text="Single" />
<asp:RadioButton runat="server" ID="rbDouble" GroupName="Type" CssClass="radios" Text="Double" />
<asp:RadioButton runat="server" ID="rbTriple" GroupName="Type" CssClass="radios" Text="Triple" />

และASP.NETแสดงผล HTML ต่อไปนี้สำหรับคุณRadioButton

<span class="radios"><input id="Content_rbSingle" type="radio" name="ctl00$Content$Type" value="rbSingle" /><label for="Content_rbSingle">Single</label></span>
<span class="radios"><input id="Content_rbDouble" type="radio" name="ctl00$Content$Type" value="rbDouble" /><label for="Content_rbDouble">Double</label></span>
<span class="radios"><input id="Content_rbTriple" type="radio" name="ctl00$Content$Type" value="rbTriple" /><label for="Content_rbTriple">Triple</label></span>

สำหรับASP.NETเราไม่ต้องการใช้RadioButtonชื่อควบคุมหรือรหัสเพราะพวกเขาสามารถเปลี่ยนด้วยเหตุผลใด ๆ ออกจากมือของผู้ใช้ (เปลี่ยนชื่อคอนเทนเนอร์ชื่อฟอร์มชื่อผู้ใช้ควบคุม ... ) ตามที่คุณเห็นในรหัสข้างต้น

วิธีที่เป็นไปได้เพียงวิธีเดียวที่เหลืออยู่ในการรับค่าของการRadioButtonใช้ jQuery คือการใช้คลาส css ตามที่กล่าวไว้ในคำตอบนี้สำหรับคำถามที่ไม่เกี่ยวข้องทั้งหมดดังต่อไปนี้

$('span.radios input:radio').click(function() {
    var value = $(this).val();
});
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.