ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • svelte(a11y-click-events-have-key-events)
    ERROR 2023. 1. 18. 21:27

     

     

    svelte로 개발하면서 div에 onClick 이벤트를 주니 만난 린트 메세지이다..

    Visible, non-interactive elements with click handlers must have at least one keyboard listener jsx-a11y/click-events-have-key-events

    "클릭 핸들러를 가지고 표시되는 비대화형 요소에는 최소한 하나의 키보드 리스너 jsx-a11y/click-events-have-key-events가 있어야 합니다." 

     

    ????????? Non-interactive HTML elements (비대화형 요소) ????????


    Non-interactive HTML elements (비대화형 요소)와 Interactive HTML elements (대화형 요소)에는 어떤것이 있는지

    아래 사진을 보면 된다.

     

    click-events-have-key-events는 설명에 따르면 <main>, <area>, <h1> (,<h2>, etc), <img>, <li>, <ul> and <ol> 태그에 onKeyUp, onKeyDown, onKeyPress 없이 onClick을 사용할 때 보여주는 메세지다.

     

    GitHub - jsx-eslint/eslint-plugin-jsx-a11y: Static AST checker for a11y rules on JSX elements.

    Static AST checker for a11y rules on JSX elements. - GitHub - jsx-eslint/eslint-plugin-jsx-a11y: Static AST checker for a11y rules on JSX elements.

    github.com

     

    해결방법

    <div onClick={() => {}} onKeyDown={this.handleKeyDown} />
    <div onClick={() => {}} onKeyUp={this.handleKeyUp} />
    <div onClick={() => {}} onKeyPress={this.handleKeyPress} />
    <button onClick={() => {}} />
    <div onClick{() => {}} aria-hidden="true" />

    onKeyUp, onKeyDown, onKeyPress 을 넣어주던가

    button, input 등 interactive HTML elements에 사용하던가

    Non-interactive HTML elements에 aria-hidden="true"를 써주던가

    하면 된다고 한다!

     

    그나저나...  aria-hidden ?????????


    MDN 설명링크

     

    Description을 보면  비대화형 콘텐츠를 숨기는 데 사용할 수 있습니다. 라고 한다.

     

    aria-hidden이 true로 설정되면, accessibility tree에서 해당 콘텐츠를 가리지만, 여전히 시각적으로는 볼수 있다.

    주의 할 점은 , aria-hidden="true"가 focusable한 요소가 되어서는 안된다는 것이다.

    스크린리더에는 보이지 않지만, focus가 되기 때문이다.

    <!-- 안됨 -->
    <button aria-hidden="true">press me</button>

     

    나는 ESLint의 요구에 따라 aria-hidden="true"를 써줬다 ㅋ ㅋ ㅋ !!

    반응형

    'ERROR' 카테고리의 다른 글

    '--isolatedModules' 에러 해결 방법  (0) 2022.06.13

    댓글

Designed by Tistory.