tabindexのHTML要素を無視する方法は?


362

特定の要素のタブインデックスを許可しないようにブラウザに指示する方法はありますか?

私のページでは、jQueryでレンダリングされたサイドショーがありますが、それをタブで移動すると、タブコントロールがページ上の次の表示リンクに移動する前に、タブプレスがたくさん表示されます。ユーザーを視覚的に。

回答:


592

使用できますtabindex="-1"

W3C HTML5仕様では、負のサポートtabindex値を:

値が負の整数
場合、ユーザーエージェントは要素のtabindexフォーカスフラグを設定する必要がありますが、順次フォーカスナビゲーションを使用して要素に到達することはできません。


ただし、これはHTML5の機能であり、古いブラウザでは動作しない可能性があることに注意してください。
であるために(1999年から)W3C HTML 4.01標準に準拠し、tabindex属性が正であることが必要です。


以下の純粋なHTMLでの使用例。

<input />
<input tabindex="-1" placeholder="NoTabIndex" />
<input />


12
リンクによると、技術的にtabIndexは0〜32767しかサポートしていないため、Google Chromeは-1をサポートしていないようW3です。だから私がこれをしたとき; 私は500を使用しました。しかし働いた。
ノミ

38
@Fleaバージョン23以降、Google Chromeはtabindexで-1をサポートします。それがどれくらい前に起こったか、おそらく23の前にわかりません。私はChrome 23、Firefox 18、IE8、IE9、およびOpera 12.11で「-1」をテストしましたが、それは全面的に機能しました。
jkupczak 2013年

5
回答を編集して、更新されたHTML5仕様にリンクしました。tabindex負の値を持つことができるようになりました。
James Donnelly 2013

1
@JamesDonnelly編集ありがとうございます。ブラウザーの互換性のために、W3C HTML4仕様への参照を再度追加しました。
マーティンヘニングス2013


121

tabindex仕様やHTMLではすべて小文字ですが、JavaScript /プロパティではDOMが呼び出されることを忘れないでくださいtabIndex

プログラムで変更されたタブインデックスの呼び出しelement.tabindex = -1が機能しない理由を理解しようとする心を失わないでください。を使用しelement.tabIndex = -1ます。


34
これは回答ではなくコメントである必要があります。
DrCord

47
えっと読んで良かったし、コメントとして埋めていたら見逃していただろう。
MalcolmOcean

10

これらがボタンやアンカーのように自然にタブオーダーの要素である場合、tabindex = -1でタブオーダーからそれらを削除することは、一種のアクセシビリティの匂いです。重複する機能を提供している場合、タブオーダーからそれらを削除しても問題ありません。これらの要素にaria-hidden = trueを追加して、支援技術がそれらを無視することを検討してください。


8

をサポートしていないブラウザで作業して tabindex="-1"いる場合、スキップする必要のあるものに非常に高いタブインデックスを与えるだけで済む場合があります。たとえば、tabindex="500"基本的にオブジェクトのタブオーダーをページの最後に移動します。

ボタンの真ん中にスローされた長いデータ入力フォームに対してこれを行いました。これはユーザーが頻繁にクリックするボタンではないため、誤ってタブに移動してEnterキーを押したくありませんでした。disabledこれはボタンなので機能しません。


5

「tabIndex = -1」のようなハックは、Chrome v53では機能しません。

これは、Chromeとほとんどのブラウザで機能します。

function removeTabIndex(element) {
    element.removeAttribute('tabindex');
}
<input tabIndex="1" />
<input tabIndex="2" id="notabindex" />
<input tabIndex="3" />
<button tabIndex="4" onclick="removeTabIndex(document.getElementById('notabindex'))">Remove tabindex</button>


これは、タブを無効にするのではなく、単に要素にデフォルトのタブインデックスを割り当てるのではないですか?
弁護士2017

@Lawyersonいいえ、自分で 'removeAttribute'を説明したため、実際にはタブ移動が無効になっています。あなたはそれを試したことがありますが、結果は異なりますか?
Val

2
効果なしで試してみました。ブラウザでは、デフォルトで、tabindexが設定されていなくても、ページに表示される順序で入力をタブで移動できます。そのため、属性を削除するだけでは実際にタブ移動が完全に無効になるわけではないというだけで意味があります。さらに、これを使用したい入力には、そもそも「tabindex」属性がありません。
弁護士2017

スニペットを実行すると、ボタンを押した後のnotabindexようにタブでボックスに移動できますtabIndex=5。市長の問題ではありませんが、それでも完全に「タブなし」にはなりません。
MikaelDúiBolinder

キャメルケースを使用しているため、機能していない可能性があります。すべて小文字にする必要がありますtabindex
dman

3

これを行う方法は、を追加することtabindex="-1"です。これを特定の要素に追加すると、キーボードナビゲーションで到達できなくなります。素晴らしい記事があり、ここであなたはさらに理解するのに役立ちますtabindexをが


2

disabled要素に属性を追加するだけです(またはjQueryを使用して行います)。無効にすると、入力がフォーカスまたは選択されなくなります。


Chromeのどのバージョンですか?
Yaakov Ainspan

Chrome 49.0.2623.75(64ビット)。
Felix Eve

私のバージョンは51.0.2704.103です。このフィドルをチェックしてください。あなたは間違ったコードを持っているかもしれません、あなたは決して知りません。
Yaakov Ainspan 16

@AtulChaudhary、どうやって動かないの?それでも集中できますか?
Yaakov Ainspan 2016年

フィールドが無効になると無効のままになりますが、これはIOS9の問題ですが、IOS10では機能しているようです
Atul Chaudhary
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.