การใช้“ ป้ายกำกับสำหรับ” บนปุ่มตัวเลือก


137

เมื่อใช้พารามิเตอร์ "label for" บนปุ่มตัวเลือกเพื่อให้เป็นไปตาม 508 * คำต่อไปนี้ถูกต้องหรือไม่

 <label for="button one"><input type="radio" name="group1" id="r1" value="1" /> button one</label> 

หรือนี่คือ?

 <input type="radio" name="group1" id="r1" value="1" /><label for="button one"> button one</label>

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

* มาตรา 508 ของพระราชบัญญัติการฟื้นฟูสมรรถภาพปี 1973 กำหนดให้หน่วยงานของรัฐบาลกลางจัดหาซอฟต์แวร์และการเข้าถึงเว็บไซต์สำหรับคนพิการ

คำตอบ:


218

คุณเกือบจะได้รับมัน ควรเป็นดังนี้:

<input type="radio" name="group1" id="r1" value="1" />
<label for="r1"> button one</label>

ค่าในforควรเป็นรหัสขององค์ประกอบที่คุณกำลังติดป้ายกำกับ


4
คำตอบของคุณแน่นอนว่าเป็นความจริง แต่มาร์ธามีคำตอบที่ถูกต้อง ตัวอย่างของ Martha ทั้งสองเป็น HTML5 ที่ใช้ได้อย่างสมบูรณ์แบบ และตัวอย่างเช่นถ้าคุณต้องการให้สิ่งทั้งหมดอยู่ในเฟรมการจัดรูปแบบที่สองโดยใช้ css จะง่ายกว่า ถ้าคุณต้องการให้ป้ายกำกับอยู่ที่อื่นก่อนอื่น แต่ทั้งคู่ก็โอเค ขอแสดงความนับถืออย่างสูง!
Jacek Kowalewski

5
อืม .. คุณจะทำให้ป้ายกำกับหนึ่งปุ่มสลับระหว่างปุ่มตัวเลือกสองปุ่มได้อย่างไร คุณไม่สามารถมีสอง ID ที่เหมือนกัน ... : /
Nils Sens

1
@NilsSens วิทยุและป้ายกำกับแต่ละคู่ควรมี ID ที่ไม่ซ้ำกันพวกเขาไม่ควรแชร์ ID
Daniel Waters

@NilsSens สลับระหว่างปุ่มตัวเลือก 2 ปุ่มและมีเพียง 1 ป้ายกำกับหรือไม่ ดูเหมือนจะเป็นกรณีที่ชัดเจนที่จะใช้ช่องทำเครื่องหมายแทน: D
T_D

อ่าไม่สิ่งที่ฉันหมายถึงคือ super-label อันหนึ่งที่สลับปุ่มตัวเลือก ชอบ: หมวดหมู่ผลไม้ที่ชอบและเมื่อคุณคลิกที่รายการนั้นคุณจะสลับระหว่าง idk "กล้วย" และ "สตรอเบอร์รี่" เพราะเหตุใดจึงบังคับใช้การเคลื่อนไหวของเมาส์ UX เมื่อคุณสามารถสลับตัวเลือกได้ วันนี้ฉันจะใช้ JS เพื่อเขียนโค้ด แต่ก็น่าสนใจที่จะรู้ว่ามี CSS วิธีเดียวหรือไม่ :)
Nils Sens

87

โครงสร้างอย่างใดอย่างหนึ่งถูกต้องและสามารถเข้าถึงได้ แต่forแอตทริบิวต์ควรเท่ากับidองค์ประกอบอินพุต:

<input type="radio" ... id="r1" /><label for="r1">button text</label>

หรือ

<label for="r1"><input type="radio" ... id="r1" />button text</label>

forแอตทริบิวต์เป็นตัวเลือกในรุ่นที่สอง (ฉลากที่มีการป้อนข้อมูล) แต่ IIRC มีบางเบราว์เซอร์รุ่นเก่าที่ไม่ได้ทำให้คลิกได้ข้อความฉลากเว้นแต่คุณจะรวมไว้ เวอร์ชันแรก (เลเบลหลังอินพุต) สามารถจัดสไตล์ด้วย CSS ได้ง่ายขึ้นโดยใช้ตัวเลือกพี่น้องที่อยู่ติด+กัน

input[type="radio"]:checked+label {font-weight:bold;}

9
จริงแม้ว่าในตัวอย่างที่สองไม่จำเป็นต้องใช้แอตทริบิวต์ "for"
อิชมาเอล

4
ฉันคิดว่ามีเบราว์เซอร์บางเวอร์ชันที่ทำให้ข้อความปุ่มเป็น "คลิกได้" เท่านั้นหากคุณใช้แอตทริบิวต์ "for" นั่นคือการตัดอินพุตภายในป้ายกำกับนั้นไม่เพียงพอ
Martha

@Martha - คุณรู้หรือไม่ว่าเบราว์เซอร์ใด?
Kirkland

2
@Kirkland - w3.org/TR/html401/interact/forms.html#h-17.9ดูเหมือนจะระบุว่ารูปแบบที่สองนั้นถูกต้อง แต่แหล่งข้อมูลหลายแห่งระบุว่าการสนับสนุนอาจไม่เป็นสากล อาจเป็นการดีที่สุดที่จะระบุforแอตทริบิวต์ไม่ว่าในกรณีใด ๆ
อิชมาเอล

1
@RalphDavidAbernathy ใช่กฎเดียวกันนี้ใช้สำหรับกล่องกาเครื่องหมาย
อิชมาเอล

0

(อันดับแรกอ่านคำตอบอื่น ๆ ที่อธิบายไว้forใน<label></label>แท็กทั้งสองคำตอบที่ถูกต้อง แต่สำหรับความท้าทายของฉันคือเมื่อคุณมีกล่องวิทยุหลายกล่องคุณควรเลือกชื่อสามัญที่เหมือนกันname="r1" แต่มีรหัสต่างกัน id="r1_1" ... id="r1_2"

ด้วยวิธีนี้คำตอบจึงชัดเจนยิ่งขึ้นและขจัดความขัดแย้งระหว่างชื่อและรหัสด้วย

คุณต้องมีรหัสที่แตกต่างกันสำหรับตัวเลือกต่างๆของกล่องวิทยุ

<input type="radio" name="r1" id="r1_1" />

       <label for="r1_1">button text one</label>
       <br/>
       <input type="radio" name="r1" id="r1_2" />

       <label for="r1_2">button text two</label>
       <br/>
       <input type="radio" name="r1" id="r1_3" />

       <label for="r1_3">button text three</label>

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