ฟอร์มที่ทุกคน
การแก้
สรุปสั้นๆ ฟอร์มที่เข้าถึง ได้
ฟอร์มที่
- ทุกช่องมี label ที่มองเห็นได้ และเชื่อมกับช่อง ไม่ใช่มีแค่ placeholder (
ข้อความ จางๆ ในช่อง) - จัดกลุ่ม
ตัวเลือก ที่เกี่ยวข้องกัน ด้วยfieldsetและlegend - บอกเป็น
ข้อความ ว่าช่องไหนต้องกรอก และต้องกรอก แบบไหน ไว้ก่อนถึงช่อง - ใส่แอตทริบิวต์
autocompleteในช่องข้อมูลของผู้เข้าชม เอง ข้อความ แจ้งข้อผิดพลาด ที่บอกวิธีแก้ อยู่ติดกับช่อง และถูกอ่านออกเสียงข้อความ แจ้งความสำเร็จและสถานะ ที่โปรแกรมอ่านหน้าจอ อ่านออกมา- ไม่ต้อง
กรอก ซ้ำ ไม่มีเวลาจำกัดแบบไม่ทันตั้งตัว และไม่มีด่านที่ผ่านได้ ด้วยการแก้ปริศนาเท่านั้น
label และโครงสร้าง ฟอร์ม
ทุกช่องต้องมี label ที่เห็นได้และเชื่อมกับช่อง
ทุกช่องต้องมี label ที่มองเห็นได้ และเชื่อมกันในโค้ด คือ <label> ที่ค่า for ตรงกับ id ของช่อง (WCAG 1.3.1, 3.3.2 และ 4.1.2) โปรแกรมอ่าน
- placeholder ไม่ใช่ label เพราะจะหายไปทันทีที่เริ่มพิมพ์ และมักจางเกินกว่าจะผ่านค่า
คอนทราสต์ 4.5:1 ที่ WCAGกำหนด สำหรับตัวอักษร ขนาดปกติ - ให้คำที่มองเห็น อยู่ในชื่อที่
เข้าถึง ได้ (accessible name) ด้วยผู้ใช้ ที่สั่งงานด้วยเสียงจะพูดตามสิ่งที่เห็น เช่น “คลิก ที่อยู่อีเมล” ถ้าaria-labelเขียนไว้เป็นคำอื่นคำสั่ง นั้นจะใช้ไม่ได้ (2.5.3 Label in Name)
จัดกลุ่มคำถาม ด้วย fieldset และ legend
ครอบปุ่ม<fieldset> และใส่<legend> เช่น “ให้เราติดต่อกลับทางไหนดี?”
บอกช่องบังคับและคำแนะนำ ไว้ก่อนช่อง
ใส่ “(จำเป็น)” หรือ “(ไม่บังคับ)” ไว้ใน label เลย และใส่กฎเรื่องaria-describedby required หรือ aria-required="true" เพื่อให้โปรแกรมอ่าน
ใช้ตัวควบคุมมาตรฐานที่เห็นชัดและกดง่าย
ช่องเลือก (select) ปุ่ม
มีอีกสามข้อในระดับ AA ที่ต้อง
autocomplete: ให้เบราว์เซอร์พิมพ์แทน
WCAG 1.3.5 Identify Input Purpose (ระดับ AA) autocomplete เบราว์เซอร์และโปรแกรมจัดการ
| ช่อง | token ที่ |
|
|---|---|---|
| ชื่อ-นามสกุล | name |
fullname (ไม่ใช่ token ที่ |
| โทรศัพท์ | tel |
phone (ก็ไม่ |
| บริษัท | organization |
organisation: token ใช้ตัวสะกดแบบอเมริกัน |
| เมือง | address-level2 |
city |
| รหัสใช้ครั้งเดียว | one-time-code |
ไม่ใส่เลย |
ใช้ token เหล่านี้กับข้อมูลของautocomplete="off" ทุกจุดในฟอร์มติดต่อหรือฟอร์มจอง และตรวจ HTML ที่แสดงผลจริง ผ่าน
แจ้งข้อผิดพลาด ให้รู้วิธีแก้
บอกว่าผิดอะไรและแก้อย่างไร
ตรวจ
| สถานการณ์ | แบบคลุมเครือ | แบบมีประโยชน์ |
|---|---|---|
| ช่องบังคับถูกปล่อยว่าง | “จำเป็น” | “ |
| “ข้อมูลไม่ |
“ |
|
| วันที่จองเป็นวันที่ผ่านไปแล้ว | “เกิด |
“เลือกวันที่ตั้งแต่ |
วางข้อความ ไว้ตรงที่คนจะเห็น
aria-describedby ใส่ aria-invalid="true" ที่ช่อง ใช้สีแดงคู่กับไอคอนและ
<label for="email">Email address</label>
<p id="email-hint">We’ll only use this to reply to you.</p>
<p id="email-error">Enter an email address like name@example.com</p>
<input id="email" name="email" type="email" autocomplete="email"
required aria-invalid="true" aria-describedby="email-hint email-error">
เพิ่มสรุปข้อผิดพลาด ในฟอร์มยาว
ในฟอร์มที่ยาว ให้แสดงสรุปไว้ด้านบนเมื่อคนกดส่ง โดยมีหัวข้อ เช่น “พบปัญหา” แล้วตามด้วย
GOV.UK ยังปิดnovalidate และเลือกทำเครื่องหมายที่ช่องที่ไม่บังคับ แทนการใช้ required ถ้าคุณใช้ required ให้ใส่ novalidate ด้วย
แจ้งผลสำเร็จและสถานะให้ทุกคนรับรู้
เมื่อฟอร์มส่งโดยไม่โหลดหน้าใหม่
- หน้ายืนยัน ที่มีชื่อหน้าและหัวข้อของ
ตัวเอง ซึ่งจะถูกอ่านออกเสียงเมื่อเปิดขึ้นมา - live region: กล่อง
role="status"ที่อยู่บนหน้าอยู่แล้ว ก่อนข้อความ จะมา ถ้าใส่กล่องและข้อความ เข้าไปพร้อมกัน มักจะไม่ถูกอ่านออกเสียง - ย้ายโฟกัสไปที่หัวข้อยืนยัน ซึ่งเหมาะกับฟอร์มที่มีหลาย
ขั้นตอน
ฟอร์มที่ก่อให้เกิดภาระผูกพัน ทางการเงินหรือทางกฎหมาย เช่น การจองแบบชำระเงิน ยังอยู่
ฟอร์มหลายขั้นตอน : กรอก ซ้ำ เวลาจำกัด และการล็อกอิน
เกณฑ์สองในสามข้อนี้เป็นของใหม่ใน WCAG 2.2 ส่วนที่เหลือของการอัปเดตนี้ อ่านได้ใน บทอธิบาย WCAG 2.2 ของเรา
อย่าถามเรื่องเดิมซ้ำ
ตามข้อ 3.3.7 Redundant Entry ข้อมูลที่ให้ไปแล้ว ใน
เวลาจำกัด ต้องปรับได้
ถ้าฟอร์มหรือเซสชันหมดเวลาได้ ข้อ 2.2.1 Timing Adjustable ระบุว่า
ระวังเวลาจำกัดที่ไม่มีใครตั้งใจ
ล็อกอินโดยไม่ต้องแก้โจทย์
ถ้าลูกค้าต้องล็อกอิน เพื่อจองหรือดาวน์โหลด
- อนุญาตให้วาง (paste) ในช่อง
รหัสผ่าน และช่องรหัสยืนยัน และใช้autocomplete="current-password"เพื่อให้โปรแกรมจัดการรหัสผ่าน ทำงานได้ - ถ้ารหัสใช้ครั้งเดียวถูกแบ่งเป็นช่องย่อยๆ ให้แน่ใจว่าการวาง และ
การกรอก อัตโนมัติ ยังเติมได้ครบทุกช่อง - มี
ทางเลือก ที่ไม่ต้องจำรหัสผ่าน เช่นลิงก์ ที่ส่งทางอีเมล หรือ passkey
แบบทดสอบให้จำแนกวัตถุ (“เลือกทุกภาพที่มีจักรยาน”) ผ่านในระดับ AA แต่ไม่ผ่านในเวอร์ชัน AAA คือข้อ 3.3.9 อย่างดีที่สุดก็ควรเป็น
ทางเลือก แทน CAPTCHA ในฟอร์มติดต่อ
ปริศนาแบบภาพและแบบเสียง เป็นอุปสรรคที่มี
ในฟอร์มติดต่อและฟอร์มขอ
- ซ่อน honeypot จากทุกคน การซ่อนแค่ทางสายตายังไม่พอ
ผู้ใช้ โปรแกรมอ่านหน้าจอ และผู้ใช้ คีย์บอร์ด ยังไปถึงช่องนั้นได้ แล้วการติดต่อสอบถามจริง ก็จะถูกทิ้งไปเป็นสแปม ต้องซ่อนจากเทคโนโลยีช่วยเหลือ ด้วย และใส่ label ว่า “เว้นช่องนี้ว่างไว้” - ทดสอบทางสำรอง ระบบ
ตรวจสอบ แบบมองไม่เห็น อาจแสดงปริศนาให้ผู้เข้าชม ที่ระบบไม่แน่ใจ ซึ่งคุณเองแทบไม่เคยเห็น ลองเปิดในหน้าต่าง ส่วนตัว ใช้คีย์บอร์ด และใช้โปรแกรมอ่านหน้าจอ
ถ้าเลี่ยงด่าน
ฟอร์มหลายภาษา: เข้าถึง ได้ทุกภาษา
ฟอร์มจะ
ตั้งค่า แอตทริบิวต์lang(3.1.1 Language of Page) เพื่อให้โปรแกรมอ่านหน้าจอ ออกเสียง label และข้อความ แจ้งข้อผิดพลาด ได้ถูกต้อง - แปลทุก
ข้อความ รวมถึงคำแนะนำ ข้อผิดพลาด ข้อความ สถานะ และอีเมลยืนยันข้อความ ตั้งต้น ของปลั๊กอินตกหล่นได้ง่าย ถ้าไม่มีขั้นตอน การแปลที่ชัดเจน - รองรับ
รูปแบบ สากล: ช่อง “ชื่อ-นามสกุล” ช่องเดียว เบอร์โทรที่มีเครื่องหมายบวก ที่อยู่ที่ไม่มีรหัสไปรษณีย์ และวันที่ที่ไม่กำกวม (03/04 หมายถึงคนละวัน ในแต่ละประเทศ) - ให้ label ที่แปลแล้วยาวขึ้น ตัดขึ้นบรรทัดใหม่ได้ และ
ตั้งค่า dirให้ถูกต้อง สำหรับภาษาที่เขียนจากขวาไปซ้าย
ทดสอบด้วยคีย์บอร์ดและโปรแกรมอ่านหน้าจอ
ใช้คีย์บอร์ดอย่างเดียว
- วางเมาส์ไว้ก่อน แล้วกด Tab ไล่ไปทั่วฟอร์ม โฟกัสควรไล่ตามลำดับที่
สมเหตุสมผล และมองเห็นได้ตลอด - ใช้ปุ่ม
ลูกศร ในกลุ่มปุ่มตัวเลือก กด Space เพื่อติ๊กช่อง และกด Enter เพื่อส่ง - ส่งฟอร์มโดยเว้นช่องบังคับไว้หนึ่งช่อง และ
กรอก อีกช่องผิดข้อผิดพลาด ควรขึ้นเป็นคำอธิบาย ข้างแต่ละช่อง และสิ่งที่คุณพิมพ์ไว้ต้องไม่หายไป
ใช้โปรแกรมอ่านหน้าจอ
ใช้ VoiceOver (มีในเครื่อง Mac และ iPhone) NVDA (ใช้ฟรีบน Windows) หรือ TalkBack (Android)
- กด Tab ไล่อีกรอบ ทุกช่องควรอ่านออกมาทั้ง label ประเภทของช่อง ว่าเป็นช่องบังคับหรือไม่ และ
คำแนะนำ ถ้ามี - ทำให้เกิด
ข้อผิดพลาด แล้วแก้ไขข้อผิดพลาด ควรถูกอ่านออกมา แล้วหยุดแจ้งเมื่อแก้แล้ว - ส่งฟอร์ม
ข้อความ ยืนยันควรถูกอ่านออกมา
ใช้การซูม กรอก อัตโนมัติ และเสียง
- ซูม
หน้าต่าง เบราว์เซอร์บนเดสก์ท็อป ที่กว้างประมาณ 1,280 พิกเซล ไปที่ 400% labelคำแนะนำ และข้อผิดพลาด ควรอยู่ติดกับช่องของมัน โดยไม่ต้องเลื่อนไปด้านข้าง (1.4.10 Reflow) - บน
มือถือ ลองกรอก ข้อมูลของคุณด้วยการกรอก อัตโนมัติ ทุกค่าควรลงในช่องที่ถูกต้อง - ใช้การสั่งงานด้วยเสียง พูดว่า “คลิก” (หรือ “แตะ” บน iPhone) ตามด้วยชื่อ label ช่องที่
ถูกต้อง ควรตอบสนอง
ขั้นตอน ต่อไป
เริ่มจากฟอร์มที่สำคัญที่สุด ซึ่งมักเป็นฟอร์มติดต่อสอบถามหรือฟอร์มจองหลัก แล้วจดทุกจุดที่การทดสอบทำให้คุณติดขัด การแก้autocomplete ที่ขาดไป
ฟอร์มอยู่ตรงจุดที่ UX เนื้อหา การพัฒนา และการติดตามผลมาบรรจบกัน การ