Làm cách nào để bỏ qua phần tử HTML từ tabindex?


362

Có cách nào trong HTML để nói với trình duyệt không cho phép lập chỉ mục tab trên các thành phần cụ thể không?

Trên trang của tôi mặc dù có một trình diễn được hiển thị bằng jQuery, khi bạn lướt qua đó, bạn sẽ nhận được rất nhiều lần nhấn tab trước khi điều khiển tab di chuyển đến liên kết hiển thị tiếp theo trên trang vì tất cả những điều được chuyển qua tab đều bị ẩn đi người dùng trực quan.

Câu trả lời:


592

Bạn có thể sử dụng tabindex="-1".

Đặc tả HTML5 của W3C hỗ trợ các tabindexgiá trị âm :

Nếu giá trị là số nguyên âm
Tác nhân người dùng phải đặt cờ tiêu điểm tabindex của phần tử, nhưng không cho phép phần tử đạt được bằng cách sử dụng điều hướng tiêu điểm liên tiếp.


Xem ra mặc dù đây là một tính năng HTML5 và có thể không hoạt động với các trình duyệt cũ.
Để tuân thủ tiêu chuẩn W3C HTML 4.01 (từ 1999) , tabindex sẽ cần phải tích cực.


Sử dụng mẫu dưới đây trong HTML thuần túy.

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


12
Có vẻ như Google Chrome không hỗ trợ -1, điều này có ý nghĩa vì về mặt kỹ thuật, tab Index chỉ hỗ trợ 0 -32767 theo liên kếtW3 . Vì vậy, khi tôi làm điều này; Tôi đã sử dụng 500. Hackish; nhưng đã làm việc
Bọ chét

38
@Flea Kể từ phiên bản 23, Google Chrome hỗ trợ -1 trên tabindex. Không chắc điều đó đã xảy ra bao lâu, có lẽ trước 23. Tôi đã thử nghiệm "-1" trong Chrome 23, Firefox 18, IE8, IE9 và Opera 12.11 và nó đã hoạt động trên bảng.
jkupczak

5
Tôi đã chỉnh sửa câu trả lời để liên kết đến đặc tả HTML5 được cập nhật. tabindexbây giờ cho phép có giá trị âm.
James Donnelly

1
@JamesDonnelly Cảm ơn bạn đã chỉnh sửa. Tôi đã thêm lại tham chiếu đến thông số W3C HTML4 cho khả năng tương thích của trình duyệt.
Martin Hennings


121

Đừng quên rằng, mặc dù tabindextất cả là chữ thường trong thông số kỹ thuật và trong HTML, trong Javascript / DOM mà thuộc tính đó được gọi tabIndex.

Đừng mất trí khi cố gắng tìm hiểu lý do tại sao các chỉ số tab được thay đổi theo chương trình của bạn gọi element.tabindex = -1không hoạt động. Sử dụng element.tabIndex = -1.


34
Điều này có vẻ như là một bình luận không phải là một câu trả lời.
DrCord

47
Eh, tôi rất vui khi đọc nó, và tôi có lẽ đã bỏ lỡ nó nếu nó được chôn cất như một bình luận.
MalcolmOcean

10

Nếu đây là các yếu tố tự nhiên trong thứ tự tab như nút và neo, loại bỏ chúng khỏi thứ tự tab với tabindex = -1 là một loại mùi có thể truy cập. Nếu họ cung cấp chức năng trùng lặp, loại bỏ chúng khỏi thứ tự tab là ổn, và xem xét thêm aria-hidden = true cho các yếu tố này để các công nghệ hỗ trợ sẽ bỏ qua chúng.


8

Nếu bạn đang làm việc trong một trình duyệt không hỗ trợ tabindex="-1", bạn có thể thoát khỏi việc chỉ đưa ra những thứ cần bỏ qua một chỉ số tab thực sự cao . Ví dụ, tabindex="500"về cơ bản di chuyển thứ tự tab của đối tượng đến cuối trang.

Tôi đã làm điều này cho một hình thức nhập dữ liệu dài với một nút ném ở giữa của nó. Đây không phải là nút mọi người nhấp rất thường xuyên nên tôi không muốn họ vô tình bấm vào nút đó và nhấn enter. disabledsẽ không hoạt động vì đó là một nút.


5

Cách hack như "tab Index = -1" không hoạt động với tôi với Chrome v53.

Đây là hoạt động cho chrome và hầu hết các trình duyệt:

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>


Điều này chỉ đơn giản là chỉ định một chỉ mục tab mặc định cho thành phần chứ không phải vô hiệu hóa tab?
Luật sư

@Lawyerson không, nó thực sự vô hiệu hóa tab khi nó tự giải thích 'removeAttribution'. Bạn đã thử nó nhưng với kết quả khác nhau?
Val

2
Tôi đã thử nó mà không có hiệu quả. Các trình duyệt theo mặc định cho phép bạn chuyển qua các đầu vào theo thứ tự xuất hiện trên trang ngay cả khi không có tabindex nào được đặt trên chúng, do đó, điều đó chỉ có ý nghĩa với tôi rằng việc loại bỏ thuộc tính không thực sự vô hiệu hóa hoàn toàn tab. Hơn nữa, đầu vào mà tôi muốn sử dụng cái này không có thuộc tính "tabindex" để bắt đầu.
Luật sư

Chạy đoạn trích tôi có thể tab vào notabindexhộp như thể tabIndex=5sau khi nhấn nút. Không phải là một vấn đề thị trưởng nhưng vẫn không làm cho nó hoàn toàn "không thể lập bảng".
Mikael Dúi Bolinder

Nó có thể không hoạt động vì bạn đang sử dụng vỏ lạc đà. Nó nên là tất cả chữ thườngtabindex
dman

3

Cách để làm điều này là bằng cách thêm tabindex="-1". Bằng cách thêm phần này vào một phần tử cụ thể, nó trở nên không thể truy cập bằng điều hướng bàn phím. Có một bài viết tuyệt vời ở đây sẽ giúp bạn hiểu thêm về tabindex .


2

Chỉ cần thêm thuộc tính disabledcho phần tử (hoặc sử dụng jQuery để làm điều đó cho bạn). Vô hiệu hóa ngăn chặn đầu vào được tập trung hoặc lựa chọn cả.


Phiên bản Chrome nào?
Yaakov Ainspan

Chrome 49.0.2623,75 (64 bit).
Đêm giao thừa

Phiên bản của tôi là 51.0.2704.103. Kiểm tra fiddle này . Bạn có thể có mã sai, bạn không bao giờ biết.
Yaakov Ainspan

@AtulChaudhary, nó không hoạt động như thế nào? Bạn vẫn có thể tập trung nó?
Yaakov Ainspan

một khi các trường bị vô hiệu hóa, chúng vẫn bị vô hiệu hóa và đó là một vấn đề trong IOS9 nhưng dường như đang hoạt động trong IOS10
Atul Chaudhary
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.