简体   繁体   English

你如何使一个div“tabbable”?

[英]How do you make a div "tabbable"?

I have buttons that are div elements and I want to make them so that it is possible for the user to press the tab key on their keyboard and move between them.我的按钮是 div 元素,我想制作它们以便用户可以按键盘上的 Tab 键并在它们之间移动。 I've tried wrapping their text in anchor tags but it doesn't seem to work.我试过将他们的文本包装在锚标记中,但它似乎不起作用。

Does anyone have a solution?有没有人有办法解决吗?

Add tabindex attributes to your div elements.tabindex属性添加到您的div元素。

Example:例子:

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

Per steveax's comment, if you don't want the tab order to deviate from where the element is in the page, set the tabindex to 0 :根据 steveax 的评论,如果您不希望选项卡顺序偏离页面中元素的位置,请将tabindex设置为0

<div tabindex="0">First</div>
<div tabindex="0">Second</div>

for those interested, in addition to the accepted answer, you can add the following jquery to make the div style change when you tab to it, and also handle Enter and Space to trigger a click (then your click handler will do the rest)对于那些感兴趣的人,除了接受的答案之外,您还可以添加以下 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()
});

I'm sure someone has made this into a jq plugin $().makeTabStop我确定有人已将其制作成 jq 插件 $().makeTabStop

Add the tabindex="0" attribute to each div you want tabbable.tabindex="0"属性添加到您希望可制表的每个 div。 Then use CSS pseudo classes:hover and:focus, for example to signify to the app user that the div is in focus and clickable, for example.然后使用 CSS 伪类:hover 和:focus,例如向应用程序用户表示 div 处于焦点并且可以点击。 Use JavaScript to handle the click.使用 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>

Make elements tabbable and clickable with key press using jquery使用 jquery 通过按键使元素可制表和可单击

Assumptions假设

  • All elements that are of a non-tabbable, non-clickable type and should be clickable have an onclick attribute (this could be changed to a class or other attribute)所有不可制表、不可点击类型且应该可点击的元素都有一个onclick属性(这可以更改为类或其他属性)
  • All elements are of the same type;所有元素都是同一类型; I will use divs.我会使用div。
  • You're using jquery你正在使用 jquery

Sample html:示例 html:

...

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

...

Jquery code: This is the code that will run when the page has loaded. Jquery 代码:这是将在页面加载时运行的代码。 It needs to run on your HTML page.它需要在您的 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
            }
        });
});

You can find a working example here .您可以在此处找到一个工作示例。

For anyone that shows up on this page for the opposite intention, as in to make a div tag NOT tabbable: https://github.com/WICG/inert is a good way.对于出于相反意图出现在该页面上的任何人,例如使 div 标签不可标记: https ://github.com/WICG/inert 是一个好方法。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM