你怎么做div"tabbable"?

The*_*oss 82 html css xhtml

我有div元素的按钮,我想制作它们,以便用户可以按下键盘上的Tab键并在它们之间移动.我已经尝试将其文本包装在锚标签中,但它似乎不起作用.

有没有人有办法解决吗?

Nep*_*eps 106

tabindexdiv元素添加属性.

例:

<div tabindex="1">First</div>
<div tabindex="2">Second</div>
Run Code Online (Sandbox Code Playgroud)

根据steveax的注释,如果您不希望Tab键顺序偏离元素在页面中的位置,请将其设置tabindex0:

<div tabindex="0">First</div>
<div tabindex="0">Second</div>
Run Code Online (Sandbox Code Playgroud)

  • 可能更好的方法是使用`tabindex = 0`,以免破坏自然的Tab键顺序. (40认同)
  • 顺便说一句,这不允许一个人点击输入虽然. (4认同)
  • Hmn,@ Picia任何想法我们如何解决或模拟点击进入该div时的点击?HMN (4认同)
  • @Dancrumb,是的他们在HTML5中 (3认同)
  • 您可以通过添加 **onkeypress** 事件函数来模拟单击。在此函数中,您必须 1) 阻止默认操作,2) 检查按下的键,如果该键应该发送单击,则触发代码中元素的单击。 (3认同)
  • 注意:tabindex 不是 HTML &lt;5 中 div 的有效属性。[参考](http://www.w3.org/TR/html401/interact/forms.html#adef-tabindex) {Neps 指出我的错误后更正} (2认同)

Awo*_*ing 6

对于那些感兴趣的人,除了接受的答案,你可以添加以下jquery,以便在选项卡时更改div样式,并处理Enter和Space以触发点击(然后你的点击处理程序将完成剩下的工作)

$(document).on('focus', '.button',function(){
    $(this).css('border','1px dotted black')
});
$(document).on('keyup', '.button',function(e){
    if(e.which==13 || e.which==32)
        $(this).click()
});
Run Code Online (Sandbox Code Playgroud)

我确定有人把它变成了一个jq插件$().makeTabStop

  • 我相信最好使用 keydown 事件而不是这里推荐的 keyup 事件:https://developer.mozilla.org/en-US/docs/Web/Accessibility/Keyboard-navigable_JavaScript_widgets。keydown 的一个明显优点是,如果您从处理程序函数返回 false(在 click() 调用之后),它将正确地停止页面上其他地方的事件传播,而使用 keyup 则不起作用。 (2认同)

Ron*_*ton 6

将属性添加tabindex="0"到您想要可选项卡的每个 div。然后使用 CSS 伪类 :hover 和 :focus 来向应用程序用户表示该 div 处于焦点并且可点击。使用 JavaScript 来处理点击。

var doc = document;
var providers = doc.getElementsByClassName("provider");

for (var i = 0; i < providers.length; i++) {
    providers[i].onclick = function() {
      console.log(this.innerHTML);
    };
}
Run Code Online (Sandbox Code Playgroud)
.provider {
    flex: 0 1 auto;
    align-self: auto;
    width: 256px;
    height: 48px;
    margin-top: 12px;
    margin-right: 12px;
    text-align: center;
    line-height: 48px;
    
    text-transform: uppercase;
    background-size: contain;
    background-repeat: no-repeat;
    background-position: 10%;
    background-color: gray;
}

.provider:hover{
  cursor: pointer;
}

.provider:focus{
    -webkit-box-shadow: 0px 2px 8px 2px rgba(0,0,0,0.4);
    -moz-box-shadow: 0px 2px 8px 2px rgba(0,0,0,0.4);
    box-shadow: 0px 2px 8px 2px rgba(0,0,0,0.4);
}
Run Code Online (Sandbox Code Playgroud)
<h4>Click in this area first then press tab</h4>
<div id="email" class="provider" tabindex="0">email</div>
<div id="facebook" class="provider" tabindex="0">facebook</div>
<div id="github" class="provider" tabindex="0">github</div>
<div id="google" class="provider" tabindex="0">google</div>
<div id="twitter" class="provider" tabindex="0">twitter</div>
Run Code Online (Sandbox Code Playgroud)