【问题标题】:How to fix 'button' interactive role must be focusable如何修复“按钮”交互角色必须是可聚焦的
【发布时间】:2019-10-19 20:41:55
【问题描述】:

我有用户可以选择的下拉选项列表。

下拉菜单中的 optinos 使用标签::

<a onClick={() => handleSelect(filter)} role="button">
   {filter.name}
</a>

问题是我必须添加tabIndex="0" or -1,以修复来自 Eslint 的错误。

但是当我添加tabIndex=0 时,我的按钮不再起作用。

还有其他方法可以解决这个错误吗?

这是下拉组件的外观:

<ul name="filters" className="dropdown">
    {filterOptions.map((filter) => (
      <li
        key={filter.id}
        defaultChecked={filter.name}
        name={filter.name}
        className={`option option-${filter.selected ? 'selected' : 'unselected'}`}
      >
        <span className={`option-${filter.selected ? 'checked-box' : 'unchecked-box'} `} />

        <a onClick={() => handleSelect(filter)} role="button">
          {filter.name}
        </a>
      </li>
    ))}
  </ul>

【问题讨论】:

    标签: javascript html reactjs eslint


    【解决方案1】:

    按钮是交互式控件,因此具有焦点。如果按钮 角色被添加到本身不可聚焦的元素(例如 &lt;span&gt;&lt;div&gt;&lt;p&gt;) 然后,必须使用 tabindex 属性 使按钮具有焦点。

    https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Roles/button_role#Accessibility_concerns

    HTML属性tabindex对应于属性tabIndex 反应。

    https://reactjs.org/docs/dom-elements.html

    所以我认为@S.. 答案是正确的:

    <a 
      onClick={() => handleSelect(filter)} 
      role="button"
      tabIndex={0}
    >
      {filter.name}
    </a>
    

    【讨论】:

      【解决方案2】:

      添加标签索引:

      <a onClick={() => handleSelect(filter)} role="button" tabIndex={i}>
          {filter.name}
      </a>
      

      在向地图添加迭代器后:(filter, i)

      【讨论】:

      猜你喜欢
      • 2022-01-23
      • 2016-08-27
      • 1970-01-01
      • 1970-01-01
      • 2021-06-22
      • 1970-01-01
      • 1970-01-01
      • 2019-04-13
      • 2014-06-04
      相关资源
      最近更新 更多