javascript - 为什么这里的tabindex只适用于0而不适用于其余的?

标签 javascript html reactjs markup tabindex

这是我的 React 组件中的 render 方法,它生成下面屏幕截图中的 UI。当我使用该应用程序时,选择输入后,我必须按两次 Tab 键才能选择第一个硬币。但是下一个选项卡开始选择浏览器的不同部分?

render() {
  const { coins } = this.state;

  return (
    <section id="search-modal">
      <header className="search-header">
        <input
          id="coin-search"
          type="text"
          placeholder="Search"
          onChange={() => this.handleChange()}
        />
        <button className="close-modal-x" onClick={this.props.closeSquareEdit} />
      </header>
      <ul className="coins-list">
        { coins !== 'undefined'
          ? coins.map((coin, i) => (
            <li
              key={coin.id}
              tabIndex={i}
              onClick={() => this.handleSelect(coin)}
            >
              {coin.name}
              <span className="symbol">({coin.symbol})</span>
            </li>))
          : null
        }
      </ul>
    </section>
  );
}

enter image description here

enter image description here

^ 在选择了 2 个选项卡 Bitcoin 后,第三个选项卡似乎重新选择了输入,第四个选项卡单击选择了浏览器 URL。

最佳答案

想通了!我需要 role="button"

<ul className="coins-list">
  { coins !== 'undefined'
    ? coins.map((coin, i) => (
      <li
        key={coin.id}
        role="button"
        tabIndex={i}
        onFocus={() => this.setFocus(coin)}
        onClick={() => this.handleSelect(coin)}
      >
        {coin.name}
        <span className="symbol">({coin.symbol})</span>
      </li>))
    : <li>Loading...</li>
  }
</ul>

但是,到达第一个 li 所需的奇怪数量的选项卡仍然存在。我需要按两次 Tab 键...然后再按几次才能开始正确地在列表中向下移动。

我添加的一个新函数和我修改的一个函数:

setFocus(coin) {
  console.log('setFocus', coin.id);
  this.setState({ focused: coin });
}

handleSelect(coin) {
  console.log('handleSelect', coin.id);
  this.setState({ focused: coin });
  this.props.openEdit(true, coin);
}

关于javascript - 为什么这里的tabindex只适用于0而不适用于其余的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50531510/

相关文章:

javascript - 获取 TypeError (不是函数) Jquery/Javascript

javascript - 在 firefox 插件中监听 http 响应时识别 XHR(ajax)响应

html - a 和 a : link and others 的区别

javascript - 为什么react js中没有定义router?

javascript - 在既不是 React 函数组件也不是自定义 React Hook 函数的函数中调用 React Hook

javascript - 如何在 react-native 中操作单个对象 JSON 的获取响应

JavaScript 表单验证,检查字符串是否包含

javascript - 更改错误文本 "Incorrect user ID or password."

html - 不支持 Vue CLI3 应用程序、HTML srcset 和 sizes 属性?

jquery - 即使将其更改为其他值(使用 JQuery),单选按钮值仍显示 0