2012-12-14 61 views
0

我有一個有多個頁面的asp.net MVC項目。 對於每個頁面,我必須將TAB鍵設置爲僅在某些控件之間移動。我知道我可以設置:在asp.net中禁用所有控件的TAB鍵mvc

tabIndex=x , x > 0 //to enable 
tabIndex=-1, //to disable 

的問題是,我有一個針對TAB鍵應該工作5個控件和50個控件,它不應該工作(該數字只是瞭解的比例)。所以我想知道是否有一種方法可以禁用整個頁面的TAB鍵(來自* .css或管理器),並且僅僅爲少數需要它的特定控件啓用它。

回答

0

據我所知,這不能像你可能希望的那樣直接完成。你可以考慮做的是執行上的地方沒有設置標籤索引的所有元素JS功能,將其設置爲小於零:

var elements = document.querySelectorAll("input:not([tabindex])"); 
for (var i = 0; i < elements.length; i++) { 
    elements[i].tabindex = -1; 
} 

請記住,取決於你有,這可能元素的數量成爲性能的拖累,所以你會想考慮基準。

你可以考慮的另一種選擇是創建一個禁用元素的Tab索引的HTML助手服務器端。您可以使用Razor @helper語法在本地執行幫助程序,也可以在HtmlHelper類中全局使用擴展方法。這會比JS執行得更好,但根據你的情況可能會有點沉重。

+0

非常感謝,我會嘗試你的解決方案。 – Laviniux

+0

請讓我知道,如果他們幫助/你最終實現了什麼:) –

+0

對不起延遲的答案,我實現了你提出的第一個解決方案,但正如你所說我有性能問題,所以我最終實現了另一個解決方案。我也會把我選擇的解決方案,我不知道是最好的,但它的工作:) – Laviniux

0

既然有這麼多的元素不應該標籤,而不是或禁用TAB鍵對他們來說,我改變了默認行爲是必須的tabIndex的元素,安其壓:

1)我把所有的元素具有tabIndex大於0:

var tabbables = document.querySelectorAll("input[tabindex], textarea[tabindex]"); 

這是一個簡化版本,你應該做的可視性檢查,還可以選擇其他類型的元素(如按鈕等)

2)我取代默認的行爲2例:TAB按壓和具有選項卡索引的最後一個元素被選中或按下SHIFT + TAB並選擇第一個元素。對於這些情況,我把焦點分別放在最後一個元素的第一個元素上。

一個很好的答案(不接受的答案,得票最多的答案),類似的問題在這裏:"Focus Next Element In Tab Index"