不幸的是,你不能這樣做沒有JavaScript。您可以收聽TAB(並確保它不是SHIFT + TAB)按鍵上的最後一個元素,並手動將焦點設置爲處理程序中的第一個元素。然而,結合這個邏輯鍵盤事件(即特定輸入法)不是普遍的,使用時可能無法正常工作:
- 的移動瀏覽器
- 其他一些娛樂設備(智能電視,遊戲機等 - 他們通常使用d-墊可聚焦元素
- 之間)跳無障礙服務
我建議一個更加普遍的做法,是不可知的重點是如何變化的。
的想法是,你環繞你的表單元素(要在其中創建「的tabindex環」)與特殊的‘焦點後衛’的元素是可聚焦太(他們有分配的tabIndex)。下面是修改後的HTML:
<p>Some sample <a href="#" tabindex="0">content</a> here...</p>
<p>Like, another <input type="text" value="input" /> element or a <button>button</button>...</p>
<!-- Random content above this comment -->
<!-- Special "focus guard" elements around your
if you manually set tabindex for your form elements, you should set tabindex for the focus guards as well -->
<div class="focusguard" id="focusguard-1" tabindex="1"></div>
<input id="firstInput" type="text" tabindex="2" class="autofocus" />
<input type="text" tabindex="3" />
<input type="text" tabindex="4" />
<input type="text" tabindex="5" />
<input type="text" tabindex="6" />
<input id="lastInput" type="text" tabindex="7" />
<!-- focus guard in the end of the form -->
<div class="focusguard" id="focusguard-2" tabindex="8"></div>
<!-- Nothing underneath this comment -->
現在你只是聽focus
事件的那些後衛元素和手動更改焦點轉移到相應的字段(jQuery的用於簡單起見):
$('#focusguard-2').on('focus', function() {
// "last" focus guard got focus: set focus to the first field
$('#firstInput').focus();
});
$('#focusguard-1').on('focus', function() {
// "first" focus guard got focus: set focus to the last field
$('#lastInput').focus();
});
由於您看到,我還確保當焦點從第一個輸入向後移動時(例如,第一個輸入上的SHIFT + TAB),我們會回到最後一個輸入。Live example
請注意,聚焦警衛也被分配了tabindex值,以確保它們緊接在輸入字段之前/之後。如果您沒有手動設置tabindex到您的輸入,那麼兩個焦點警衛都可以分配tabindex="0"
。
當然,當你的表格動態生成時,你也可以在動態環境中完成所有工作。只需找出您的focusable elements(較不重要的任務)並用相同的保護裝置環繞它們即可。
希望有幫助,讓我知道你是否有任何問題。
UPDATE
由於NBRO指出,上述實現了,如果一個擊中TAB在頁面加載後(因爲這會關注第一聚焦元素是#focusguard-1
選擇最後一個元素的不需要的效果,這將引發聚焦,最後輸入爲了減輕這一點,你可以指定你想要的元素最初的重點是他和另一個小片的JavaScript的重點是:
$(function() { // can replace the onload function with any other even like showing of a dialog
$('.autofocus').focus();
})
隨着這個,只要設置autofocus
類就可以了,不管你想要什麼樣的元素,它都會專注於頁面加載(或任何你聽的其他事件)。
你可以爲每個你不想屬於taborder的元素設置'tabindex =「 - 1」',也就是說你的代碼中的''Random content'「部分的每個可聚焦元素。 [MSDN:tabindex](http://msdn.microsoft.com/en-us/library/ie/ms534654%28v=vs.85%29.aspx)(在MDN處找不到頁面) – Teemu
** 'document.body.tabIndex ='0'; document.body.focus(); document.body.tabindex ='-1'' **也可以使用相同的tabindex,如果它們在HTML中正確排序的話 – neaumusic