具有 on:click 事件的可见非交互式元素必须伴随 on:keydown、on:keyup 或 on:keypress 事件

H N*_*san 20 accessibility dom-events svelte sveltekit

A11y:具有 on:click 事件的可见非交互式元素必须伴随 on:keydown、on:keyup 或 on:keypress event.svelte (a11y-click-events-have-key-events)

这个错误是什么意思 ?我在 sveltekit 中得到的太多了。当我想添加事件侦听器时,请单击此警告显示给我。即使事件处理程序也不为空。在我的代码下面。

<div
    class="select-options max-h-0 transition-all duration-300 bg-slate-100"
    data-target="option-selection-wrapper"
    >
    {#each options as item}
        <div class="border py-1 border-dark-300 px-3 text-sm" on:click={()=> {
            selectedItem = item
        }}>
            {@html item.name}
        </div>
    {/each}
</div>
Run Code Online (Sandbox Code Playgroud)

有没有可能的方法来删除这个警告。以及为什么会显示此警告。

H.B*_*.B. 28

出现警告的原因是,如果将单击处理程序添加到非交互式元素,则无法通过键盘与它们进行交互,这对于可访问性非常重要。尝试在不使用鼠标的情况下与您的应用程序进行交互,看看您能走多远。

可以点击的东西应该总是使用buttonelements (除非它是关于导航的,否则应该使用<a>)。

(该消息在较新版本的 Svelte 中应该更有帮助。文档现在也提供了更多关于此的信息。)

  • 除了键盘事件处理程序之外,您还需要** `tabindex="0"`(如果您没有按照建议使用`&lt;button&gt;`等本机交互元素),以便您可以按 TAB 键元素**和**您的交互元素**必须具有**一个[角色](https://www.w3.org/TR/wai-aria/#role_definitions),例如`role =“button”`或`role =“checkbox”`或`role =“radio”`,当然,这取决于交互元素的目的。 (6认同)
  • 但添加 tabindex 将触发另一个警告,即“no-noninteractive-tabindex”:-/我希望 svelte 会添加一个可访问性教程,以补充这些警告 (4认同)

Jay*_* D. 16

如果您想禁用这些警告:

将其添加到您的svelte.config.js

const config = {
  // ...
  onwarn: (warning, handler) => {
    if (warning.code === 'a11y-click-events-have-key-events') return
    handler(warning)
  },
}
Run Code Online (Sandbox Code Playgroud)

您甚至可以使用以下命令禁用所有 a11y 警告日志:

const config = {
  // ...
  onwarn: (warning, handler) => {
    if (warning.code.startsWith('a11y-')) return
    handler(warning)
  },
}
Run Code Online (Sandbox Code Playgroud)
如果你想删除 VSCode 中的警告

将其添加到您的eslintrc.cjs

module.exports = {
  //..
  settings: {
    //...
    'svelte3/ignore-warnings': (warning) => {
      return warning.code === 'a11y-click-events-have-key-events'
    },
  },
}
Run Code Online (Sandbox Code Playgroud)

将其添加到您的.vscode/settings.json

"svelte.plugin.svelte.compilerWarnings": {
  "a11y-click-events-have-key-events": "ignore",
},
Run Code Online (Sandbox Code Playgroud)