tabindex에서 HTML 요소를 무시하는 방법?


361

HTML에서 브라우저에 특정 요소에 대한 탭 색인 생성을 허용하지 않는 방법이 있습니까?

내 페이지에는 jQuery로 렌더링 된 사이드 쇼가 있지만 탭을 통해 탭을 탭하면 탭 컨트롤이 페이지의 다음 보이는 링크로 이동하기 전에 탭 프레스가 많이 발생합니다. 시각적으로 사용자.

답변:


591

사용할 수 있습니다 tabindex="-1".

W3C HTML5 사양 제외 지원 tabindex값 :

값이 음의 정수인 경우
사용자 에이전트는 요소의 tabindex 포커스 플래그를 설정해야하지만 순차적 포커스 탐색을 사용하여 요소에 도달해서는 안됩니다.


이것이 HTML5 기능이므로 이전 브라우저에서는 작동하지 않을 수 있습니다.
(1999) W3C HTML 4.01 표준 준수의 tabindex는 긍정적해야합니다.


순수한 HTML에서 아래의 샘플 사용법.

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


12
Chrome에서 -1을 지원하지 않는 것 같습니다. 기술적으로 tabIndex는 link 에 따라 0-32767 만 지원하므로 의미가 W3있습니다. 그래서 내가 이것을했을 때; 나는 500을 사용했다. 그러나 일했다.
Flea

38
@Flea 버전 23부터 Chrome은 tabindex에서 -1을 지원합니다. 어쩌면 23 년 이전에 그 일이 얼마나 오래 있었는지 잘 모르겠습니다. Chrome 23, Firefox 18, IE8, IE9 및 Opera 12.11에서 "-1"을 테스트했으며 전체적으로 작동했습니다.
jkupczak

5
업데이트 된 HTML5 사양에 연결하기 위해 답변을 편집했습니다. tabindex이제 음수 값을 가질 수 있습니다.
James Donnelly

1
@JamesDonnelly 편집 해 주셔서 감사합니다. 브라우저 호환성을 위해 W3C HTML4 사양에 대한 참조를 다시 추가했습니다.
Martin Hennings


121

tabindex스펙과 HTML에서 모두 소문자 이지만 속성이 호출 되는 Javascript / DOM 에서 잊지 마십시오 tabIndex.

프로그래밍 방식으로 변경된 탭 인덱스 호출 element.tabindex = -1이 작동하지 않는 이유를 알아 내려고 노력하지 마십시오 . 사용하십시오 element.tabIndex = -1.


34
이것은 대답이 아닌 의견이어야합니다.
DrCord

47
Eh, 나는 그것을 읽게되어 기뻤다. 그리고 만일 그것이 주석으로 묻히면 그것을 놓쳤을 것이다.
MalcolmOcean 2016 년

10

이러한 요소가 버튼 및 앵커와 같이 탭 순서에서 자연스럽게 요소 인 경우 tabindex = -1로 탭 순서에서 요소를 제거하면 일종의 접근성 냄새가납니다. 중복 기능을 제공하는 경우 탭 순서에서 제거해도 괜찮습니다. 보조 요소가 무시되도록 aria-hidden = true를 이러한 요소에 추가하십시오.


8

당신이 지원하지 않는 브라우저에서 작업하는 경우 tabindex="-1", 당신은 정말 높은 탭 인덱스를 건너 뛸 필요가있는 것들을 제공 멀리 도망 수 있습니다 . 예를 들어 tabindex="500"기본적으로 객체의 탭 순서를 페이지 끝으로 이동합니다.

나는 중간에 버튼이 던져진 긴 데이터 입력 양식을 위해 이것을했다. 사람들이 자주 클릭하는 버튼이 아니기 때문에 실수로 탭하고 Enter 키를 누르는 것을 원하지 않았습니다. disabled버튼이기 때문에 작동하지 않습니다.


5

"tabIndex = -1"과 같은 해킹은 Chrome v53에서 작동하지 않습니다.

이것은 크롬 및 대부분의 브라우저에서 작동합니다.

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"속성이 없습니다.
Lawyerson

스 니펫을 실행하면 버튼을 누른 후 notabindex처럼 상자로 이동할 수 있습니다 tabIndex=5. 시장의 문제는 아니지만 여전히 "전적으로 탭할 수없는"것은 아닙니다.
Mikael Dúi Bolinder

낙타 케이스를 사용하고 있기 때문에 작동하지 않을 수 있습니다. 모두 소문자 여야합니다tabindex
dman

3

이를 수행하는 방법은을 추가하는 것 tabindex="-1"입니다. 이것을 특정 요소에 추가 하면 키보드 탐색으로 접근 할 수 없게 됩니다. tabindex에 대한 이해를 돕기 위한 훌륭한 기사가 있습니다 .


2

disabled요소에 속성 을 추가 하거나 jQuery를 사용 하여 속성 을 지정하십시오. Disabled는 입력이 집중되거나 선택되는 것을 방지합니다.


어떤 버전의 Chrome?
Yaakov Ainspan 2016 년

Chrome 49.0.2623.75 (64 비트)
Felix Eve

내 버전은 51.0.2704.103입니다. 이 바이올린을 확인하십시오 . 코드가 잘못되었을 수 있습니다.
Yaakov Ainspan

@ AtulChaudhary, 어떻게 작동하지 않습니까? 여전히 집중할 수 있습니까?
Yaakov Ainspan

일단 필드가 비활성화되면 비활성화 된 상태로 유지되며 IOS9에서는 문제이지만 IOS10에서 작동하는 것 같습니다
Atul Chaudhary
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.