포커스를받을 수있는 HTML 요소는 무엇입니까?


248

포커스를 잡을 수있는 HTML 요소의 명확한 목록을 찾고 focus()있습니다.

초점을 맞출 수있는 요소에서 작동하는 jQuery 확장을 작성 중입니다. 이 질문에 대한 답변으로 내가 타겟팅하는 요소를 구체적으로 설명 할 수 있기를 바랍니다.

답변:


337

명확한 목록은 없으며 브라우저에 달려 있습니다. 우리가 가지고있는 유일한 표준은 DOM Level 2 HTML 이며, focus()메소드 를 가진 유일한 요소 는 HTMLInputElement, HTMLSelectElement, HTMLTextAreaElement 및 HTMLAnchorElement입니다. HTMLButtonElement 및 HTMLAreaElement는 특히 생략됩니다.

오늘날의 브라우저 focus()는 HTMLElement를 정의 하지만 요소가 다음 중 하나가 아니면 실제로 초점을 맞추지 않습니다.

  • href가있는 HTMLAnchorElement / HTMLAreaElement
  • HTMLInputElement / HTMLSelectElement / HTMLTextAreaElement / HTMLButtonElement disabled(단, IE는 실제로 시도하면 오류가 발생 함)이며 파일 업로드는 보안상의 이유로 비정상적인 동작을합니다
  • HTMLIFrameElement (초점을 맞추는 데 유용한 기능은 없음) 다른 포함 요소도 테스트하지 않은 것 같습니다.
  • 를 가진 모든 요소 tabindex

브라우저에 따라이 동작에 다른 미묘한 예외 및 추가 사항이있을 수 있습니다.


2
나는 몇 가지 흥미로운 결과를 발견 jsfiddle.net/B7gn6은 은 "의 tabindex"ATTRIB 적어도 크롬에서 작업하는 것만으로는 충분하지 않습니다 나에게 제안 ..
존 z를

19
tabindex 속성은 "작성자가 요소의 초점을 맞출 수 있는지 여부를 제어 할 수 있도록"HTML5에서 표준화되어 있습니다. w3.org/TR/html5/… 기본적으로 값이 0이면 요소의 초점을 맞추지 만 브라우저의 순서는 그대로 둡니다. .
natevw

7
모든 요소 element.isContentEditable === true에 초점을 맞출 수 있습니다. IE -10 (11+?)은 표시 블록 또는 테이블 (div, span 등)이있는 모든 요소에 초점을 맞출 수 있습니다.
mems

14
탭 인덱스가 -1 인 요소는 포커스 방법을 통해 프로그래밍 방식으로 포커스를받을 수 있습니다. 탭할 수 없습니다.
jessebeach

5
… tabindex가 -1이 아닌 경우 포커스를 불가능하게합니다 >> 참이 아닌 경우 tabindex가 -1이면 CLICKING으로 초점을 맞출 수 있지만 "tab"을 눌러 초점을 맞추는 것은 불가능합니다. -1은 요소를 포커스 가능하게 만들고 탭 순서로 추가되지 않습니다. jsfiddle.net/0jz0kd1a를 참조하십시오. 먼저 요소를 클릭 한 다음 tabindex를 0으로 변경하고 tab을 사용하십시오.
daremkd

37

여기에 포커스 가능한 HTML 요소를 선택하는 bobince답변 을 기반으로 CSS 선택기가 있습니다 .

  a[href]:not([tabindex='-1']),
  area[href]:not([tabindex='-1']),
  input:not([disabled]):not([tabindex='-1']),
  select:not([disabled]):not([tabindex='-1']),
  textarea:not([disabled]):not([tabindex='-1']),
  button:not([disabled]):not([tabindex='-1']),
  iframe:not([tabindex='-1']),
  [tabindex]:not([tabindex='-1']),
  [contentEditable=true]:not([tabindex='-1'])
  {
      /* your CSS for focusable elements goes here */
  }

또는 SASS에서 조금 더 아름답습니다.

a[href],
area[href],
input:not([disabled]),
select:not([disabled]),
textarea:not([disabled]),
button:not([disabled]),
iframe,
[tabindex],
[contentEditable=true]
{
    &:not([tabindex='-1'])
    {
        /* your SCSS for focusable elements goes here */
    }
}

Google 이이 Stackoverflow 질문으로 나를 리디렉션했을 때 찾고 있던 것이기 때문에 답변으로 추가했습니다.

편집 : 초점을 맞출 수있는 선택기가 하나 더 있습니다.

[contentEditable=true]

그러나 이것은 매우 드물게 사용됩니다.


@TWiStErRob-선택기는 탭 인덱스가 명시 적으로 설정되지 않은 요소를 포함하지 않으므로 @ReeCube의 선택기와 동일한 요소를 대상으로하지 않습니다. 예를 들어 속성 을 가진 요소 <a href="foo.html">Bar</a>이기 때문에 초점을 맞출 수 있습니다. 그러나 선택기에 포함되지 않습니다. ahref
jbyrd

@jbyrd는 bobince의 진술을 기반으로 한 편집 요청이었습니다. "... tabindex가 -1이 아니고 포커스를 불가능하게하지 않는 한"은 ReeCube의 답변을 대체 할 수 없습니다. 편집 기록을 참조하십시오.
TWiStErRob

SASS (또는 CSS)는 위의 질문에 대한 엄격한 답변을 제공하기에 적합한 형식입니다 (브라우저 불일치를 제외 함).
Roy Tinker

tabindex="-1"않습니다 하지 요소가 unfocusable하게, 그냥 탭 이동으로 초점을 맞출 수 없습니다. 여전히 클릭하거나 프로그래밍 방식으로 포커스를받을 수 있습니다 HTMLElement.focus(). 다른 음수에 대해서도 동일합니다. 참조 : developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/…
Lazzaro

tabindex-1로 항목을 제외하지 않습니다. 사용자는 입력 장치를 통해 초점을 맞출 수 없지만 프로그래밍 방식으로 초점을 설정하고 표시 할 수 있습니다.
James Westgate

7
$focusable:
  'a[href]',
  'area[href]',
  'button',
  'details',
  'input',
  'iframe',
  'select',
  'textarea',

  // these are actually case sensitive but i'm not listing out all the possible variants
  '[contentEditable=""]',
  '[contentEditable="true"]',
  '[contentEditable="TRUE"]',

  '[tabindex]:not([tabindex^="-"])',
  ':not([disabled])';

집중 가능한 모든 요소의 SCSS 목록을 작성 중이며이 질문의 Google 순위로 인해 누군가에게 도움이 될 수 있다고 생각했습니다.

몇 가지 참고할 사항 :

  • 어떻게 든 생성하는 것이 완벽하게 타당 :not([tabindex="-1"])하기 :not([tabindex^="-"])때문에로 변경 했습니다 -2. 미안보다 안전합니까?
  • :not([tabindex^="-"])다른 모든 포커스 가능한 선택기에 추가 하는 것은 완전히 의미가 없습니다. [tabindex]:not([tabindex^="-"])그것을 사용 하면 이미 부정 할 모든 요소가 포함됩니다 :not!
  • 나는 포함 :not([disabled])장애인 요소 수 있기 때문에 결코 포커스 수 없습니다. 다시 말하지만 모든 단일 요소에 추가하는 것은 쓸모가 없습니다.



당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.