web-dev-qa-db-ja.com

divを「タブ可能」にする方法は?

Div要素であるボタンがあり、ユーザーがキーボードのタブキーを押してそれらの間を移動できるようにするために、それらを作成する必要があります。アンカータグでテキストを折り返そうとしましたが、うまくいかないようです。

誰にも解決策がありますか?

78
TheBoss

tabindex属性をdiv要素に追加します。

例:

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

Steveaxのコメントに従って、タブオーダーをページ内の要素の位置から外したくない場合は、tabindex0に設定します。

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

興味のある人には、受け入れられた答えに加えて、次のjqueryを追加して、タブでタブスタイルを変更し、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にしたと確信しています

5
AwokeKnowing

tabindex="0"attabeable各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>
2
Ron Royston

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

実用的な例を見つけることができます here

0
b_laoshi