为什么这里的 tabindex 只能用 0 而不能用其余的?

Why does tabindex here only work with 0 and not the rest?

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

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>
  );
}

^ 在 2 个选项卡 Bitcoin 被 select 编辑后,第 3 个选项卡似乎重新select 输入,第 4 个选项卡单击 select 浏览器 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);
}