ปุ่มตัวเลือก jQuery ตั้งค่า


137

ฉันกำลังพยายามตั้งค่าปุ่มตัวเลือก ฉันต้องการตั้งค่าโดยใช้ค่าหรือรหัส

นี่คือสิ่งที่ฉันพยายาม

$('input:radio[name=cols]'+" #"+newcol).attr('checked',true);

newcol คือรหัสของปุ่มตัวเลือก

อาจจะมีการแก้ไขเล็กน้อยตามลำดับ

มีกล่องวิทยุสองชุดชุดหนึ่งมีเสาและอีกชุดมีแถว ดังนั้นฉันจึงเห็นประเด็นในการไม่ใช้ id ความผิดฉันเอง. ดังนั้นฉันจึงมีตัวอย่าง:

<input type="radio" name="rows" class="listOfCols" 
   style="width: 50%; " value="Site"></input>

และ

<input type="radio" name="cols" class="listOfCols" 
   style="width: 50%; "  value="Site"></input>

เมื่อลบรหัสออกและฉันต้องตั้งค่าให้ถูกต้อง


คำตอบ:


197

ตัวเลือกของคุณมองหาinput:radio[name=cols]องค์ประกอบที่สืบทอดมาจากองค์ประกอบที่มีรหัสnewcol(เช่นเดียวกับค่าของตัวแปรนั้น)

ลองใช้สิ่งนี้แทน (เนื่องจากคุณเลือกด้วย ID อยู่แล้ว):

$('#' + newcol).prop('checked',true);

นี่คือการสาธิต: http://jsfiddle.net/jasper/n8CdM/1/

นอกจากนี้สำหรับ jQuery 1.6 วิธีการที่แนะนำในการแก้ไขคุณสมบัติคือ.prop(): http://api.jquery.com/prop


5
+1 สำหรับVSprop เลิกใช้งานคุณสมบัติและไม่ทำงานใน jQuery 2.0 อีกต่อไป))attrattr
gavenkoa

89

ฉันพบคำตอบที่นี่:
https://web.archive.org/web/20160421163524/http://vijayt.com/Post/Set-RadioButton-value-using-jQuery

โดยทั่วไปหากคุณต้องการตรวจสอบปุ่มตัวเลือกเดียวคุณต้องส่งค่าเป็นอาร์เรย์:

$('input:radio[name=cols]').val(['Site']);
$('input:radio[name=rows]').val(['Site']);

สวัสดีลิงค์นั้นไม่มีเนื้อหาที่แนะนำอยู่ในนั้น ทำไมพวกคุณถึงปฏิเสธการแก้ไขของฉันเพื่อลบลิงค์ ไม่มีสิ่งใดที่เกี่ยวข้องกับเรื่องนี้
Menuka Ishan

@MenukaIshan ประเด็นคือ: ให้เครดิต ลิงก์มีอยู่ใน web.archive.org และคนที่เขียนเป็นครั้งแรกและคนที่ฉันได้รับแนวคิดเกี่ยวกับคำตอบจะต้องได้รับเครดิต อย่าลบลิงก์และหากคุณต้องการดูโพสต์ต้นฉบับให้คัดลอกและวางลิงก์ (ฉันไม่รู้ว่าทำไมมันถึงไปที่หน้าเก่าแทนที่จะเป็น web.archive.org)
Chococroc

2
@Chococroc คุณไม่ได้กำหนดค่า Markdown ของคำถามอย่างถูกต้อง ฉันเห็นเวอร์ชันที่เก็บถาวรของเว็บและเชื่อมโยงอย่างถูกต้อง หลังจากตรวจสอบแล้วจะเชื่อมโยงไปยังไซต์ได้อย่างถูกต้อง
Menuka Ishan

2
ดูเหมือนว่านี่ควรเป็นคำตอบที่ได้รับการยอมรับเนื่องจากเป็นโซลูชันที่กล่าวถึงในเอกสาร jQuery
plong0

15

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

$('input:radio[name="cols"]').attr('checked', 'checked');

นี่จะถือว่าคุณมีปุ่มตัวเลือกต่อไปนี้ในมาร์กอัปของคุณ:

<input type="radio" name="cols" value="1" />

หากปุ่มตัวเลือกของคุณมี id:

<input type="radio" name="cols" value="1" id="myradio" />

คุณสามารถใช้ตัวเลือกรหัสได้โดยตรง:

$('#myradio').attr('checked', 'checked');

หากมีวิทยุหลายเครื่องที่มีcolsชื่อ$('input:radio[name="cols"]').attr('checked', 'checked');จะเลือกเพียงรายการสุดท้าย มันจะเรียกใช้โค้ดในแต่ละรหัส แต่ทุกครั้งที่คุณตั้งค่าcheckedคุณสมบัติองค์ประกอบที่ตั้งไว้ก่อนหน้านี้จะไม่ได้ตั้งค่า นี่คือตัวอย่าง: jsfiddle.net/jasper/n8CdM/2
Jasper

@ แจสเปอร์ใช่เรื่องจริง ด้วยเหตุนี้ฉันจึงแนะนำให้ใช้ตัวเลือกรหัส
Darin Dimitrov

12

คุณสามารถลองใช้รหัสต่อไปนี้:

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

การดำเนินการนี้จะตั้งค่าแอตทริบิวต์ที่ตรวจสอบสำหรับคอลัมน์วิทยุและค่าตามที่ระบุ


2
...the most important concept to remember about the checked attribute is that it does not correspond to the checked property.ที่มา: api.jquery.com/attr
Jasper

10

'input:radio[name=cols]'ทำไมคุณต้อง ไม่ทราบ html ของคุณ แต่สมมติว่ารหัสไม่ซ้ำกันคุณสามารถทำได้

$('#'+newcol).prop('checked', true);

6

ลองสิ่งนี้:

$("#" + newcol).attr("checked", "checked");

ฉันมีปัญหากับattr("checked", true)ฉันจึงมักจะใช้ข้างต้นแทน

นอกจากนี้หากคุณมี ID คุณก็ไม่จำเป็นต้องมีสิ่งอื่นในการเลือก ID ไม่ซ้ำกัน


1
prop ดีกว่า attr สำหรับสิ่งนี้
RozzA

attr หายไปใน jQuery 1.9+ ใช้ prop
Mike_Laird

คุณพูดถูก แต่สุดท้ายแล้วก็ขึ้นอยู่กับสถานการณ์เฉพาะของคุณ หากโค้ดของคุณมักจะทำงานด้วย jQuery 1.6+ แสดงว่า prop คือหนทางที่จะไป แต่ถ้าโค้ดของคุณอาจทำงานบนเวอร์ชันเก่าการแก้ปัญหาก็ไม่ตรงไปตรงมา ตัวอย่างเช่นฉันดูแลปลั๊กอิน jQuery PickList และเรารองรับ jQuery 1.4+ ดังนั้นการใช้ prop จึงไม่ใช่ตัวเลือก นี่เป็นตั๋วแบบเปิดดังนั้นหากคุณมีข้อเสนอแนะที่สวยงามฉันชอบที่จะได้ยินพวกเขา ฉันยังไม่มีเวลาทำวิจัย
The Awnry Bear

ปัญหาคือแม้ว่าโซลูชันของคุณอาจเข้ากันได้มากกว่า แต่ก็ไม่สามารถใช้งานได้ในกรณีนี้: เลือก A จะได้รับchecked="checked"แอตทริบิวต์ใหม่และเบราว์เซอร์จะแสดงว่าเลือกแล้วเลือก B และสิ่งเดียวกันจะเกิดขึ้น ตอนนี้เมื่อคุณเลือก A อีกครั้งมันจะมีchecked="checked"แอตทริบิวต์อยู่แล้วและจะไม่มีอะไรเปลี่ยนแปลง เนื่องจากผลข้างเคียงของ B นั้นจะยังคงถูกเลือกไม่ใช่ A.
Kyborek

2

เนื่องจากnewcolเป็นรหัสของปุ่มตัวเลือกคุณสามารถใช้งานได้ดังต่อไปนี้

$("#"+newcol).attr('checked',true);

2

การใช้.filter()งานยังใช้งานได้และมีความยืดหยุ่นสำหรับ id, value, name:

$('input[name="cols"]').filter("[value='Site']").attr('checked', true);

(เห็นในบล็อกนี้ )


1
ฉันเชื่อว่านี่เป็นคำตอบที่ถูกต้องเท่ากัน แต่ควรใช้ prop () method: $ ('input [name = "cols"]'). filter ("[value = 'Site']"). prop ('checked ', จริง);. ผู้ใช้ต้องการกำหนดโดย "ค่าหรือรหัส" อาจมีบางครั้งที่คุณไม่ต้องการตั้งค่า id สำหรับตัวเลือกวิทยุทุกตัวดังนั้นการตั้งชื่อและกรองตามค่าจึงมีประโยชน์
Zac Imboden



0

คำตอบที่เลือกใช้ได้ในกรณีนี้

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

บรรทัดนี้จะเลือกสิ่งที่ถูกขอในขณะที่แสดงการเปลี่ยนแปลงบนหน้าจอด้วย

$('input:radio[name=cols][id='+ newcol +']').click();

0

ในกรณีของฉันค่าปุ่มตัวเลือกจะถูกดึงมาจากฐานข้อมูลแล้วตั้งค่าลงในแบบฟอร์ม รหัสต่อไปนี้ใช้ได้กับฉัน

$("input[name=name_of_radio_button_fields][value=" + saved_value_comes_from_database + "]").prop('checked', true);
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.