【问题标题】:How to make tabindex localized within a div如何使 tabindex 在 div 中本地化
【发布时间】:2017-06-28 02:17:28
【问题描述】:

我试图举例说明在可访问性方面的不良做法。我有三个与键盘焦点有关的示例。第一个示例是您无法看到一组按钮上的焦点。第二个例子是焦点顺序不合逻辑。为了完成第二个和第三个示例,我必须在一些标签中添加 tabindex 属性。

我有点难以理解我如何能够通过前 4 个按钮(按顺序)切换,然后移动到表单(按第一个字段、提交、第三个字段的顺序,然后第二个字段),然后最后进入链接的 div(按顺序,但有一个循环)。

目前发生的情况是,通过前 4 个按钮切换是可行的,但随后焦点转到 url 地址栏,然后转到输入字段。我希望焦点顺序从 div 到 div。我还要注意,这将在网站的标签面板中,所以我希望它是非常独立的。

我希望这有点道理,我在 webdev 方面没有太多经验。这是 Codepen 和 html 供参考!谢谢!

Codepen:https://codepen.io/anon/pen/ZyaMrP

<style>
button:focus {
  outline: none !important;
  text-decoration: none !important;
}
</style>

<p>Unfocusable buttons</p>
<div class="buttons">
  <button>button 1</button>
  <button>button 2</button>
  <button>button 3</button>
  <button>button 4</button>
</div>

<p>Unintuitive Focus Order</p>
<div class="inputs">
  <form>
    <label>input 1</label>
    <input type="text" tabindex="1"><br>
    <label>input 2</label>
    <input type="text" tabindex="4"><br>
    <label>input 3</label>
    <input type="text" tabindex="2"><br>
    <input type="submit" value="Submit" tabindex="3">
  </form>
</div>

<p>Focus Trap (Loop)</p>
<div class="links">
  <a href="#" tabindex="5">link 1</a>
  <a href="#" tabindex="6">link 2</a>
  <a href="#" tabindex="7" onFocus="this.tabindex=4;" onBlur="this.tabindex=7;">link 3</a>
</div>

【问题讨论】:

    标签: javascript jquery html css web


    【解决方案1】:

    https://codepen.io/anon/pen/awVRmm

    在您的内联 javascript 中,您需要确保使用 this.tabIndex,因为 this.tabindex 不是有效属性。

    <p>Unfocusable buttons</p>
    <div class="buttons">
      <button>button 1</button>
      <button>button 2</button>
      <button>button 3</button>
      <button>button 4</button>
    </div>
    <p>Unintuitive Focus Order</p>
    <div class="inputs">
      <form>
        <label>input 1</label>
        <input type="text" onFocus="this.tabIndex+=1;"><br>
        <label>input 2</label>
        <input type="text" onFocus="this.tabIndex+=3;"><br>
        <label>input 3</label>
        <input type="text" onFocus="this.tabIndex+=4;"><br>
        <input type="submit" value="Submit" onFocus="this.tabIndex+=2;">
      </form>
    </div>
    <p>Focus Trap (Loop)</p>
    <div class="links">
      <a href="#" tabindex="5">link 1</a>
      <a href="#" tabindex="6">link 2</a>
      <a href="#" tabindex="7" onFocus="this.tabIndex=4;" onBlur="this.tabIndex=7;">link 3</a>
    </div>
    

    【讨论】:

    • 啊,谢谢!我错过了。另外,这不只是通过前 4 个按钮,第一个输入字段,然后直接转到链接吗?我仍然希望其他两个输入字段和提交按钮按 Tab 键顺序排列(尽管不是按顺序排列)。
    • 我的另一个问题是,默认的 tabindex 不是总是设置为 0 吗?所以如果你这样做了。tabIndex+=x(其中 x 是一个数字),是不是和说 tabindex = "x" 一样,但只在焦点被放置一次?
    • @landofall 您将选项卡困在第二和第三个链接中,因此它永远不会在页面上继续,只会继续循环,因为您正在困住它。是的,默认索引为 0,除非已设置。因此,如果您执行 onFocus 事件,则每次聚焦时,标签索引都会增加。
    • 对,我希望链接保持循环(在我的示例中演示键盘陷阱是什么),但对于第一次运行,我希望能够通过前 4 个按钮和表格,然后陷入循环。我认为在代码笔中,在第一次运行时,它通过按钮进行选项卡,只有第一个输入字段,然后是链接循环。我的问题更多是关于如何正确处理。谢谢!
    猜你喜欢
    • 2020-05-31
    • 1970-01-01
    • 1970-01-01
    • 2020-11-14
    • 1970-01-01
    • 1970-01-01
    • 2018-10-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多