วิธีการละเว้นองค์ประกอบ HTML จาก tabindex?


361

มีวิธีใดบ้างใน HTML ที่จะบอกเบราว์เซอร์ว่าไม่อนุญาตให้สร้างดัชนีแท็บในองค์ประกอบเฉพาะหรือไม่

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

คำตอบ:


591

tabindex="-1"คุณสามารถใช้

ข้อกำหนดW3C HTML5รองรับtabindexค่าลบ:

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


ระวังว่านี่เป็นคุณสมบัติ HTML5 และอาจไม่ทำงานกับเบราว์เซอร์รุ่นเก่า
เพื่อให้เป็นไปตามมาตรฐาน W3C HTML 4.01 (จากปี 1999) Tabindex จะต้องเป็นค่าบวก


ตัวอย่างการใช้งานด้านล่างด้วย HTML ล้วนๆ

<input />
<input tabindex="-1" placeholder="NoTabIndex" />
<input />


12
มันจะปรากฏ Google Chrome ไม่สนับสนุน -1 ซึ่งจะทำให้รู้สึกตั้งแต่เทคนิค tabIndex สนับสนุนเฉพาะ 0 -32767 ตามลิงค์ W3ดังนั้นเมื่อฉันทำสิ่งนี้; ฉันใช้ 500. แฮ็ค; แต่ทำงาน
หมัด

38
@Flea ตั้งแต่วันที่ 23, Google Chrome รองรับ -1 บน tabindex ไม่แน่ใจว่านานมาแล้วที่เกิดขึ้นอาจจะก่อน 23 ฉันทดสอบ "-1" ใน Chrome 23, Firefox 18, IE8, IE9 และ Opera 12.11 และมันทำงานได้ทั่วทั้งกระดาน
jkupczak

5
ฉันได้แก้ไขคำตอบเพื่อเชื่อมโยงกับข้อมูลจำเพาะ HTML5 ที่อัปเดตแล้ว tabindexตอนนี้อนุญาตให้มีค่าลบ
James Donnelly

1
@JamesDonnelly ขอบคุณสำหรับการแก้ไขของคุณ ฉันเพิ่มการอ้างอิงไปยังข้อมูลจำเพาะ W3C HTML4 อีกครั้งสำหรับความสามารถในการเบราว์เซอร์
Martin Hennings

2
รองรับตั้งแต่ IE 5.01 msdn.microsoft.com/en-us/library/ie/ms534654(v=vs.85).aspx
Skurpi

121

อย่าลืมว่าแม้tabindexเป็นตัวพิมพ์เล็กทั้งหมดในรายละเอียดและใน HTML ในJavascript / DOM tabIndexที่คุณสมบัติที่เรียกว่า

อย่าลืมที่จะคิดออกว่าทำไมการที่ดัชนีแท็บที่มีการเปลี่ยนแปลงทางโปรแกรมโทรelement.tabindex = -1ไม่ทำงาน element.tabIndex = -1ใช้


34
ดูเหมือนว่าควรเป็นความเห็นไม่ใช่คำตอบ
DrCord

47
เอ๊ะฉันดีใจที่ได้อ่านและฉันอาจจะพลาดถ้ามันถูกฝังไว้เป็นความคิดเห็น
MalcolmOcean

10

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


8

หากคุณกำลังทำงานในเบราว์เซอร์ที่ไม่รองรับ tabindex="-1"คุณอาจหลีกเลี่ยงเพียงแค่ให้สิ่งที่ต้องข้ามดัชนีแท็บที่สูงมาก ๆ ตัวอย่างเช่นtabindex="500"โดยทั่วไปจะย้ายลำดับแท็บของวัตถุไปยังจุดสิ้นสุดของหน้า

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


5

แฮ็คเช่น "tabIndex = -1" ใช้งานไม่ได้กับ Chrome v53

สิ่งนี้ใช้ได้กับ chrome และเบราว์เซอร์ส่วนใหญ่:

function removeTabIndex(element) {
    element.removeAttribute('tabindex');
}
<input tabIndex="1" />
<input tabIndex="2" id="notabindex" />
<input tabIndex="3" />
<button tabIndex="4" onclick="removeTabIndex(document.getElementById('notabindex'))">Remove tabindex</button>


สิ่งนี้จะไม่กำหนดดัชนีแท็บเริ่มต้นให้กับองค์ประกอบแทนที่จะปิดใช้งานการทำแท็บหรือไม่
Lawyerson

@Lawyerson ไม่มันปิดการใช้งานแท็บตามที่อธิบายด้วยตนเองว่า 'removeAttribute' คุณลองแล้ว แต่มีผลต่างออกไปไหม
Val

2
ฉันลองแล้วไม่มีผล เบราว์เซอร์โดยค่าเริ่มต้นอนุญาตให้คุณแท็บผ่านอินพุตตามลำดับที่ปรากฏบนหน้าเว็บแม้ว่าจะไม่มี tabindex ติดตั้งอยู่ก็ตามดังนั้นมันก็สมเหตุสมผลดีสำหรับฉันที่เพียงลบแอตทริบิวต์ไม่ได้ปิดใช้งานการทำแท็บทั้งหมด นอกจากนี้อินพุตที่ฉันต้องการใช้อันนี้ไม่มีแอ็ตทริบิวต์ "tabindex" ที่จะเริ่มต้นด้วย
Lawyerson

เรียกใช้ตัวอย่างฉันสามารถแท็บไปยังnotabindexกล่องราวกับว่ามันมีtabIndex=5หลังจากกดปุ่ม ไม่ใช่ปัญหาของนายกเทศมนตรี แต่ก็ยังไม่ได้ทำให้มันเป็น "unable tabable" ทั้งหมด
Mikael Dúi Bolinder

อาจไม่ทำงานเพราะคุณใช้เคสอูฐ ควรเป็นตัวพิมพ์เล็กทั้งหมดtabindex
dman

3

tabindex="-1"วิธีการทำเช่นนี้คือโดยการเพิ่ม โดยการเพิ่มสิ่งนี้ไปยังองค์ประกอบเฉพาะมันจะไม่สามารถเข้าถึงได้โดยการนำทางคีย์บอร์ด มีบทความที่ดีที่นี่ที่จะช่วยให้คุณเข้าใจTabindexเพิ่มเติมเพิ่มเติม


2

เพียงเพิ่มคุณสมบัติdisabledให้กับองค์ประกอบ (หรือใช้ jQuery เพื่อทำเพื่อคุณ) ปิดใช้งานจะป้องกันไม่ให้อินพุตถูกโฟกัสหรือเลือกเลย


Chrome รุ่นใด
Yaakov Ainspan

Chrome 49.0.2623.75 (64 บิต)
เฟลิกซ์อีฟ

รุ่นของฉันคือ 51.0.2704.103 ตรวจสอบซอนี้ คุณอาจมีรหัสผิดคุณไม่เคยรู้
Yaakov Ainspan

@AtulChaudhary มันทำงานอย่างไร คุณยังสามารถโฟกัสได้หรือไม่
Yaakov Ainspan

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