115

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

有没有人有办法解决吗?

4

5 回答 5

153

为您的元素添加tabindex属性。div

例子:

<div tabindex="1">First</div>
<div tabindex="2">Second</div>

根据 steveax 的评论,如果您不希望制表符顺序偏离页面中元素的位置,请将其设置tabindex0

<div tabindex="0">First</div>
<div tabindex="0">Second</div>
于 2012-11-30T00:32:49.247 回答
8

对于那些感兴趣的人,除了接受的答案之外,您还可以添加以下 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()
});

我敢肯定有人已经把它做成了一个 jq 插件 $().makeTabStop

于 2015-08-05T22:37:34.173 回答
5

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

于 2017-08-14T02:28:23.220 回答
2

使用 jquery 通过按键使元素可选项卡和可点击

假设

  • 所有属于不可选项卡、不可点击类型且应可点击的元素都具有onclick属性(可以更改为类或其他属性)
  • 所有元素都属于同一类型;我将使用 div。
  • 您正在使用 jquery

示例 html:

...

<div onclick="clicked(this)">Button 1</div>
<div onclick="clicked(this)">Button 2</div>
<div onclick="clicked(this)">Button 3</div>

...

Jquery 代码:这是页面加载后将运行的代码。它需要在您的 HTML 页面上运行。

$(()=>{
    // make divs with an onclick attribute tabbable/clickable
    $('div[onclick]')
        .attr('tabindex', '0')                     // Add tab indexes
        .keypress((evt)=>{
            var key = evt.key;
            evt.preventDefault();                  // Ensure all default keypress
                                                   // actions are not used
            if (key === ' ' || key === 'Enter') {  // Only send click events for Space
                                                   // or Enter keys
                evt.currentTarget.click();         // Run the click event for element
            }
        });
});

您可以在此处找到一个工作示例。

于 2019-03-29T07:15:04.357 回答
1

对于出于相反意图而出现在此页面上的任何人,例如使 div 标签不可选项卡:https ://github.com/WICG/inert是一个好方法。

于 2021-02-23T20:40:34.007 回答