ความแตกต่างระหว่าง type="text" และ type="password" กับผลกระทบต่อ Screen Reader

ความแตกต่างพื้นฐานระหว่าง type="text" และ type="password"
type="text"
- เป็นช่องข้อความธรรมดา เนื้อหาที่พิมพ์สามารถมองเห็นได้ชัดเจน
- Screen reader มักประกาศว่าเป็นช่องข้อความ เช่น
- NVDA "Edit"
- JAWS "Edit box"
- VoiceOver (Mac) "Text field"
type="password"
- เป็นช่องสำหรับกรอกรหัสผ่าน เนื้อหาจะถูกซ่อนด้วยสัญลักษณ์ เช่น
••••• - Screen reader มักประกาศว่าเป็นช่องรหัสผ่าน เช่น
- NVDA "Password edit"
- JAWS "Password edit box"
- VoiceOver "Password field" หรือ "Secure text field"
ความแตกต่างในการอ่านและตีความของ Screen Reader
การระบุประเภทของ input
type="text"บอกว่าเป็นช่องข้อความปกติtype="password"แจ้งให้ผู้ใช้ทราบว่าเป็นช่องรหัสผ่าน ซึ่งช่วยให้เข้าใจว่าข้อมูลในช่องนี้มีความสำคัญและอาจต้องป้องกัน
การอ่านเนื้อหาในช่อง
type="text"Screen reader จะอ่านเนื้อหาที่พิมพ์ เช่น ถ้าพิมพ์ "hello" จะพูดว่า "Edit, hello"type="password"Screen reader จะไม่อ่านเนื้อหาจริง แต่จะพูดเพียงว่า "Password edit" หรือ "Protected" (บางกรณีอาจแจ้งจำนวนตัวอักษร เช่น "5 characters")
การตอบสนองขณะพิมพ์ (Real-time feedback)
type="text"ถ้าเปิด echo characters Screen reader จะพูดตัวอักษรที่พิมพ์ เช่น พิมพ์aจะพูดว่า "a"type="password"Screen reader อาจพูดตัวอักษรที่พิมพ์ แต่เมื่อออกจากช่องจะไม่อ่านเนื้อหาย้อนหลังเพื่อป้องกันการเปิดเผยรหัสผ่าน
พฤติกรรมเมื่อสลับระหว่าง text และ password (Toggle Button)
หากใช้ปุ่มสลับ (toggle) เปลี่ยน type ของ input จะมีผลต่อ Screen reader ดังนี้
- เมื่อเปลี่ยนจาก
password→textScreen reader อาจอ่านเนื้อหาของช่อง - เมื่อเปลี่ยนจาก
text→passwordScreen reader จะไม่อ่านเนื้อหาที่ถูกซ่อน - บาง Screen reader (เช่น NVDA) อาจไม่แจ้งการเปลี่ยนแปลงทันทีหากโฟกัสยังอยู่ที่เดิม
การแจ้งเตือนให้ Screen Reader รับรู้
- การใช้
aria-labelกับปุ่ม toggle เช่น"Show password"/"Hide password"ช่วยให้ผู้ใช้เข้าใจว่ากำลังเปิดหรือปิดการแสดงรหัสผ่าน aria-liveสามารถใช้แจ้งการเปลี่ยนแปลงสถานะแบบ real-time
สรุปความแตกต่างที่สำคัญ
| คุณสมบัติ | type="text" |
type="password" |
|---|---|---|
| เนื้อหามองเห็นได้ | ✅ ใช่ | ❌ ไม่ (ซ่อนด้วย •) |
| Screen reader อ่านเนื้อหา | ✅ อ่านทั้งหมด | ❌ ไม่อ่าน (แจ้งแค่ว่าเป็นช่องรหัสผ่าน) |
| Echo ขณะพิมพ์ | ✅ อ่านตัวอักษรที่พิมพ์ | ✅ อาจอ่าน แต่จะไม่ย้อนอ่านเนื้อหาเมื่อออกจากช่อง |
| เปลี่ยน type ระหว่าง text/password | ✅ อ่านเนื้อหาเมื่อเป็น text |
❌ ซ่อนเนื้อหาเมื่อเป็น password |
| ใช้ aria-label กับ toggle button | ⚠️ ไม่จำเป็น | ✅ ควรใช้ (Show password / Hide password) |
ข้อสังเกต
type="password"ออกแบบมาเพื่อปกป้องข้อมูล ไม่เปิดเผยเนื้อหาผ่าน Screen reader- หากมีปุ่ม toggle ควรใช้
aria-labelหรือaria-liveเพื่อช่วยให้ผู้ใช้ทราบถึงการเปลี่ยนแปลง