การใช้ Tabindex

ลำดับแท็บเริ่มต้นที่ระบุโดยตำแหน่ง DOM ขององค์ประกอบ HTML เชิงความหมายคือ แต่ในบางครั้งคุณอาจต้องแก้ไขลำดับแท็บ สำหรับเคลื่อนย้ายของใหญ่ องค์ประกอบต่างๆ ใน HTML เหมาะสมที่สุด แต่อาจจะไม่สามารถทำได้ ในกรณีเหล่านี้ คุณ สามารถใช้แอตทริบิวต์ HTML tabindex เพื่อตั้งค่าแท็บขององค์ประกอบอย่างชัดแจ้ง ตำแหน่ง

การรองรับเบราว์เซอร์

  • 1
  • 12
  • 1.5
  • อย่างน้อย 4

แหล่งที่มา

สามารถใช้ tabindex กับองค์ประกอบใดก็ได้ แต่ไม่จําเป็นเสมอไป มีประโยชน์ในทุกองค์ประกอบและใช้ช่วงของค่าจำนวนเต็ม ด้วย tabindex คุณสามารถระบุลำดับที่ชัดเจน สำหรับเอลิเมนต์ของหน้าที่โฟกัสได้ แทรกองค์ประกอบอื่นๆ ที่ไม่สามารถโฟกัสได้ลงในลำดับแท็บ และนำองค์ประกอบออก จากลำดับแท็บ เช่น

tabindex="0": แทรกองค์ประกอบในลำดับแท็บตามปกติ องค์ประกอบสามารถ โฟกัสได้โดยกดแท็บ และโฟกัสองค์ประกอบได้โดยการเรียกใช้ เมธอด focus()

tabindex="-1": นำองค์ประกอบออกจากลำดับแท็บตามปกติ ยกเว้นองค์ประกอบ ก็ยังโฟกัสได้โดยเรียกใช้เมธอด focus()

tabindex="5": ดัชนี Tab ที่มากกว่า 0 จะนำองค์ประกอบนั้นมาไว้ด้านหน้า ของลำดับแท็บตามปกติ หากมีหลายองค์ประกอบที่มี Tabindex มากกว่า มากกว่า 0 ลำดับของแท็บจะเริ่มต้นจากค่าต่ำสุดที่มากกว่า 0 และทำงานได้มากขึ้น

โดยเฉพาะอย่างยิ่งกับองค์ประกอบที่ไม่ใช่อินพุต เช่น ส่วนหัว รูปภาพ หรือบทความ หนังสือ หากเป็นไปได้ ควรจัดเรียงซอร์สโค้ดเพื่อให้ลำดับ DOM แสดง ลำดับแท็บเชิงตรรกะ หากใช้ tabindex ให้จำกัดจะต้องเป็นอินเทอร์แอกทีฟที่กำหนดเอง ควบคุม เช่น ปุ่ม แท็บ เมนูแบบเลื่อนลง และช่องข้อความ ซึ่งก็คือองค์ประกอบ ผู้ใช้อาจคาดหวังว่าจะมอบข้อมูลให้

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

จัดการโฟกัสที่ระดับหน้าเว็บ

ในบางครั้ง tabindex ก็จำเป็นสำหรับประสบการณ์ของผู้ใช้ที่ราบรื่น ตัวอย่างเช่น หากคุณสร้างหน้าเว็บเดียวที่มีประสิทธิภาพโดยมีส่วนเนื้อหาที่แตกต่างกัน เนื้อหาทั้งหมดจะปรากฏพร้อมกัน นี่อาจหมายถึงลิงก์การนำทาง เปลี่ยนเนื้อหาที่มองเห็นได้โดยไม่ต้องรีเฟรชหน้า

ในกรณีนี้ ให้ระบุพื้นที่เนื้อหาที่เลือกและให้ tabindex ของ -1 และเรียกใช้เมธอด focus เพื่อให้มั่นใจว่าเนื้อหาจะไม่ปรากฏใน ตามลำดับแท็บตามปกติ เทคนิคนี้เรียกว่าการจัดการโฟกัสซึ่งทำให้ บริบทที่ผู้ใช้รับรู้ซึ่งสอดคล้องกับเนื้อหาภาพของเว็บไซต์

จัดการโฟกัสในคอมโพเนนต์

ในบางกรณี คุณต้องจัดการโฟกัสที่ระดับการควบคุมด้วย เช่น คอมโพเนนต์ที่กำหนดเอง

ตัวอย่างเช่น องค์ประกอบ select สามารถรับโฟกัสพื้นฐาน คุณสามารถใช้ปุ่มลูกศรเพื่อแสดงตัวเลือกเพิ่มเติมที่เลือกได้ หากคุณสร้างองค์ประกอบ select ที่กำหนดเอง คุณจะต้องทำซ้ำองค์ประกอบนั้น เพื่อให้ผู้ใช้แป้นพิมพ์ยังคงโต้ตอบกับการควบคุมของคุณได้

การรู้ลักษณะการทำงานของแป้นพิมพ์ที่อาจเป็นเรื่องยาก การเขียน Accessible Rich Internet Applications (ARIA) แนวทางปฏิบัติ แสดงประเภทของคอมโพเนนต์และประเภทของการทำงานของแป้นพิมพ์ที่รองรับ

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

<radio-group>
    <radio-button>Water</radio-button>
    <radio-button>Coffee</radio-button>
    <radio-button>Tea</radio-button>
    <radio-button>Cola</radio-button>
    <radio-button>Ginger Ale</radio-button>
</radio-group>

หากต้องการดูว่าลูกค้าต้องการการรองรับแป้นพิมพ์ใด ให้ดูที่ ระเบียบปฏิบัติการเขียน ARIA ส่วนที่ 2 มีรายการรูปแบบการออกแบบ รวมถึง ตารางลักษณะเฉพาะสำหรับวิทยุ กลุ่ม คอมโพเนนต์ที่มีอยู่ ซึ่งตรงกับองค์ประกอบใหม่มากที่สุด

ลักษณะการทำงานของแป้นพิมพ์ทั่วไปที่ควรจะเป็น ที่สนับสนุนคือปุ่มลูกศรขึ้น/ลง/ซ้าย/ขวา หากต้องการเพิ่มลักษณะการทำงานนี้ใน เราใช้เทคนิคที่เรียกว่า roving Tabindex

Roving Tabindex ทำงานโดยการตั้งค่า tabindex เป็น -1 สำหรับเด็กทั้งหมดยกเว้น ที่ใช้งานอยู่ในปัจจุบัน

<radio-group>
  <radio-button tabindex="0">Water</radio-button>
  <radio-button tabindex="-1">Coffee</radio-button>
  <radio-button tabindex="-1">Tea</radio-button>
  <radio-button tabindex="-1">Cola</radio-button>
  <radio-button tabindex="-1">Ginger Ale</radio-button>
</radio-group>

คอมโพเนนต์จะใช้ Listener เหตุการณ์บนแป้นพิมพ์เพื่อกำหนดว่าคีย์ใด การกดของผู้ใช้ เมื่อมีเหตุการณ์เช่นนี้ การตั้งค่าโปรไฟล์ย่อยที่โฟกัสก่อนหน้า tabindex เป็น -1 กำหนด tabindex ของบุตรหลานที่ต้องการโฟกัสเป็น 0 แล้วเรียกใช้ฟังก์ชัน โฟกัสในเรื่องนี้ได้

<radio-group>
    <!-- Assuming the user pressed the down arrow, we'll focus the next available child -->
    <radio-button tabindex="-1">Water</radio-button>
    <radio-button tabindex="0">Coffee</radio-button> // call .focus() on this element
    <radio-button tabindex="-1">Tea</radio-button>
    <radio-button tabindex="-1">Cola</radio-button>
    <radio-button tabindex="-1">Ginger Ale</radio-button>
</radio-group>

เมื่อผู้ใช้มาถึงส่วนสุดท้าย (หรือรายการแรก ขึ้นอยู่กับทิศทางที่พวกเขาอยู่ ย้ายโฟกัส) โฟกัสจะย้อนกลับไปที่รายการแรก (หรือสุดท้าย) ของบุตรหลาน

ลองดูตัวอย่างต่อไปนี้ ตรวจสอบองค์ประกอบใน เครื่องมือสำหรับนักพัฒนาเว็บในการสังเกต Tabindex เคลื่อนที่จากวิทยุหนึ่งไปยังวิทยุถัดไป

โมดัลและดักแป้นพิมพ์

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

ส่วนที่ 2.1.2 ของ WCAG ระบุว่าไม่ควรล็อกโฟกัสของแป้นพิมพ์หรือ ติดอยู่ที่เอลิเมนต์หนึ่งของหน้า ผู้ใช้ควรสามารถไปยังและจากองค์ประกอบทั้งหมดของหน้าได้โดยใช้เฉพาะ แป้นพิมพ์

ข้อยกเว้นสำหรับกฎนี้คือโมดัล อย่างไรก็ตาม คุณยังควรหลีกเลี่ยงการใช้ tabindex เมื่อสร้างโมดัล เมื่อใช้ inert คุณจะทำสิ่งต่อไปนี้ได้ เพื่อให้มั่นใจว่าผู้ใช้จะไม่โต้ตอบกับองค์ประกอบหนึ่งโดยไม่ได้ตั้งใจ ( กับดักแป้นพิมพ์) ใช้<dialog> ซึ่งจะไม่มีลักษณะโดยค่าเริ่มต้น เพื่อสร้างโมดัลสำหรับผู้ใช้ขณะบล็อก การคลิกและแท็บภายนอกโมดัล ซึ่งช่วยให้ผู้ใช้มุ่งเน้นที่ จำเป็นต้องเลือก