날짜 선택기 콤보박스 예제

다음 날짜 선택기는 대화상자를 여는 콤보박스 설계 패턴의 구혠을 보여줍니다. 날짜 선택 대화상자는 날짜 선택 버튼을 활성화 하거나 키보드 초점을 콤보박스로 이동시키고 아래 방향키Alt + 아래 방향키를 눌러 열립니다. 대화상자는 달력을 표시하고 날짜를 선택할 수 있는 그리드 패턴의 구현을 포함합니다. 대화상자의 추가 버튼은 그리드에 표시된 월과 연도를 변경하는데 사용 가능합니다.

유사한 예는 다음과 같습니다:

예제

(날짜 형식: mm/dd/yyyy)

접근성 특성

키보드 지원

Combobox

기능
아래 방향키,
ALT + 아래 방향키
  • 날짜 선택 대화상자을 엽니다.
  • 콤보박스가 유효한 날짜를 포함하는 경우, 초점을 달력 그리드의 그 날짜로 이동시킵니다. 그렇지 않으면, 현재 날짜 즉, 오늘 날짜로 초점을 이동시킵니다.

날짜 선택 대화상자

기능
ESC 대화상자를 닫고 콤보박스로 초점을 이동시킵니다.
TAB
  • 대화 상자 Tab 시퀀스의 다음 엘리먼트로 초점을 이동시킵니다.
  • 그리드 설계 패턴에 정의된 대로, 달력 그리드의 오직 한 개 엘리먼트만 Tab 시퀀스에 존재하다는 것에 주의하세요.
  • 초점이 마지막 버튼(즉, "확인")에 있다면, 첫 번째 버튼(즉 "이전 해")으로 초점을 이동시킵니다.
Shift + TAB
  • 대화상자 Tab 시퀀스의 이전 엘리먼트로 초점을 이동시킵니다.
  • 그리드 설계 패턴에 정의된 대로, 달력 그리드의 오직 한 개 엘리먼트만 Tab 시퀀스에 존재하다는 것에 주의하세요.
  • 초점이 첫 번째 버튼(즉, "이전 해")에 있다면, 마지막 버튼 (즉, "확인")으로 초점을 이동시킵니다.

날짜 선택 대화상자: 달력 버튼

기능
Space,
Enter
달력 그리드에 표시 된 월 과/또는 연도를 변경합니다.

날짜 선택 대화상자: 날짜 그리드

기능
Space
  • 날짜를 선택합니다.
  • combobox의 값을 선택 된 날짜로 갱신합니다.
Enter
  • 날짜를 선택합니다.
  • combobox의 값을 선택 된 날짜로 갱신합니다.
  • 대화상자를 닫고 초점을 combobox로 이동시킵니다.
위 방향키 이전 주의 동일한 요일로 초점을 이동시킵니다.
아래 방향키 다음 주의 동일한 요일로 초점을 이동시킵니다.
오른쪽 방향키 다음 요일로 초점을 이동시킵니다.
왼쪽 방향키 이전 요일로 초점을 이동시킵니다.
Home 현재 주의 첫 번째 요일(예를 들어 일요일)로 초점을 이동시킵니다.
End 현재 주의 마지막 요일(예를 들어 토요일)로 초점을 이동시킵니다.
PageUp
  • 날짜 그리드를 이전 달로 변경합니다.
  • 동일한 주의 동일한 요일로 초점을 이동시킵니다. 그 요일이 존재하지 않다면, 이전 또는 다음 주의 동일한 요일로 초점을 이동시킵니다.
Shift+
PageUp
  • 날짜 그리드를 이전 연도로 변경합니다.
  • 이전 해의 동일한 주의 동일한 요일로 초점을 이동시킵니다. 그 요일이 존재하지 않다면, 이전 또는 다음 주의 동일한 요일로 초점을 이동십니다.
PageDown
  • 날짜 그리드를 다음 달로 변경합니다.
  • 동일한 주의 동일한 요일로 초점을 이동시킵니다. 그 요일이 존재하지 않다면, 이전 또는 다음 주의 동일한 요일로 초점을 이동시킵니다.
Shift+
PageDown
  • 날짜 그리드를 다음 연도로 변경합니다.
  • 다음 해의 동일한 주의 동일한 요일로 초점을 이동시킵니다. 그 요일이 존재하지 않다면, 이전 또는 다음 주의 동일한 요일로 초점을 이동시킵니다.

날짜 선택 대화상자: 확인 및 취소 버튼

기능
Space,
Enter
버튼을 활성화 하면:
  • "취소": 대화상자를 닫고, 콤보박스로 초점을 이동시키고, 콤보박스 값을 갱신하지 않습니다.
  • "확인": 대화상자를 닫고, 콤보박스로 초점을 이동시키고, 콤보박스의 날짜를 갱신합니다.

Role, Property, State, Tabindex 어트리뷰트

Combobox

역할(role) 어트리뷰트 엘리먼트 사용법
combobox input input 엘리먼트를 콤보박스를 식별시킵니다.
aria-haspopup="dialog" input 콤보박스가 대화상자를 엶을 나타냅니다.
aria-expanded="false" input 콤보박스가 접혀있음 즉, "날짜 선택" 대화상자가 노출되어 있지 않음을 나타냅니다.
aria-expanded="true" input 콤보박스가 확장 되어 있음 즉, "날짜 선택" 대화상자가 열려있음을 나타냅니다.
aria-autocomplete="none" input 콤보박스가 자동완성을 지원하지 않음을 나타냅니다.
aria-controls="IDREF" input 콤보박스에 의해 제어되는 엘리먼트를 식별시킵니다.
aria-describedby="IDREF" input 보조기술이 날짜 형식 설명과 input을 연결할 수 있도록, 콤보박스에 대한 접근 가능한 설명을 제공하는 엘리먼트를 식별시킵니다.

날짜 선택 버튼

역할(role) 어트리뷰트 엘리먼트 사용법
tabindex="-1" button 콤보박스 설계 패턴에 지정된 Tab 시퀀스에서 버튼 즉, 아래 화살표 아이콘을 제외시킵니다.
aria-label="string" button 접근 가능한 이름을 버튼을 활성화하여 열린 대화상자의 제목과 일치하는 "날짜 선택"으로 정의합니다.

날짜 선택 대화상자

역할(role) 어트리뷰트 엘리먼트 사용법
dialog div 엘리먼트를 대화상자로 식별시킵니다.
aria-modal="true" div 대화상자가 모달임을 나타냅니다.
aria-label="날짜 선택" div 대화상자에 대한 접근 가능한 이름을 정의합니다.
aria-live="polite" h2
  • 현재 표시된 월과 연도를 포함하는 엘리먼트가 변경되었을 때 스크린리더가 자동으로 알려야 함을 나타냅니다.
  • polite 값은 다른 알림이 중단되지 않아야 함을 나타냅니다.
aria-live="polite" div
  • 그리드 탐색을 위한 키보드 명령에 대한 정보를 표시하는 엘리먼트가 스크린리더에서 자동으로 알려야 함을 나타냅니다.
  • 스크린리더는 초점 변경 이벤트 알림 후에 그것을 알릴 가능성이 더 크므로, 스크립트는 정보의 표시를 약간 지연시킵니다.
  • polite 값은 다른 알림이 중단되지 않아야 함을 나타냅니다.

날짜 선택 대화상자: 달력 탐색 버튼

역할(role) 어트리뷰트 엘리먼트 사용법
aria-label="String" button 버튼의 접근 가능한 이름을 정의합니다. (예. "다음 해").

날자 선택 대화상자: 날짜 그리드

역할(role) 어트리뷰트 엘리먼트 사용법
grid table
  • table 엘리먼트를 grid 위젯으로 식별시킵니다.
  • grid 역할(role)이 table 엘리먼트에 적용되므로, row, columnheader, gridcell 역할은 tr, th, td 태그에 의해 암묵적이기 때문에 지정될 필요가 없습니다.
aria-labelledby="IDREF" table 그리드에 표시된 날짜의 월과 연도를 나타내는 h2grid에 대한 접근 가능한 이름을 제공하는 엘리먼트를 식별시킵니다.
tabindex="0" td
  • 그리드셀을 초점을 얻을 수 있게(focusable) 만들고 대화상자 Tab 시퀀스에 포함시킵니다.
  • 엘리먼트가 대화상자 Tab 시퀀스에 포함될 때 자바스크립트에 의해 동적으로 설정됩니다.
  • 언제든지, 그리드 내의 오직 한 개 gridcellTab 시퀀스에 존재합니다.
  • 초점을 관리하는 이 접근 방식은 이동(roving) tabindex 섹션에 기술되어 있습니다.
tabindex="-1" td
  • 그리드셀을 초점을 얻을 수 있게(focusable) 만들고 대화상자 Tab 시퀀스에서 제외시킵니다.
  • 그리드셀이 대화상자 Tab 시퀀스에 포함될 때 자바스크립트에 의해 동적으로 0으로 변경됩니다.
  • 언제든지, 그리드 내의 오직 한 개 gridcellTab 시퀀스에 존재합니다.
  • 초점을 관리하는 이 접근 방식은 이동(roving) tabindex 섹션에 기술되어 있습니다.
aria-selected="true" td
  • 셀이 선택되었음을 나타냅니다
  • 콤보박스의 현재 값을 나타내는 그리드셀에 설정하세요; 다른 그리드셀은 aria-selected가 지정되지 않습니다.

참고: 열 제목의 요일 이름이 두 글자로 축약되어 있으므로, 스크린리더에 의해 낭독 될 때 이해하기 어려울 수 있습니다. th 엘리먼트의 abbr 어트리뷰트를 적용하여 스크린리더에 대체 열 제목 이름이 제공될 수 있습니다. 따라서, 각 th 엘리먼트는 그 열에 대한 요일 이름의 전체 철자를 포함하는 abbr 어트리뷰트가 포함됩니다.

Javascript와 CSS 소스 코드

HTML Source Code