我有一个包含多个页面的 asp.net MVC 项目。对于每个页面,我必须将 TAB 键设置为仅在某些控件之间进行。我知道我可以设置:
tabIndex=x , x > 0 //to enable
tabIndex=-1, //to disable
问题是我有 5 个 TAB 键应该工作的控件和 50 个不应该工作的控件(这些数字只是为了理解比例)。所以我想知道是否有一种方法可以禁用整个页面的 TAB 键(来自 *.css 或管理器),而不是只为需要它的几个特定控件启用它。
我有一个包含多个页面的 asp.net MVC 项目。对于每个页面,我必须将 TAB 键设置为仅在某些控件之间进行。我知道我可以设置:
tabIndex=x , x > 0 //to enable
tabIndex=-1, //to disable
问题是我有 5 个 TAB 键应该工作的控件和 50 个不应该工作的控件(这些数字只是为了理解比例)。所以我想知道是否有一种方法可以禁用整个页面的 TAB 键(来自 *.css 或管理器),而不是只为需要它的几个特定控件启用它。
据我所知,这不能像您希望的那样直接完成。您可以考虑做的是对所有未设置选项卡索引的元素执行 JS 函数,将其设置为小于零:
var elements = document.querySelectorAll("input:not([tabindex])");
for (var i = 0; i < elements.length; i++) {
elements[i].tabindex = -1;
}
请记住,根据您拥有的元素数量,这可能会拖累性能,因此您需要考虑进行基准测试。
您可以考虑的另一个选项是创建一个 HTML 助手服务器端,它禁用元素的选项卡索引。您可以使用 Razor@helper
语法在本地执行帮助程序,也可以使用 HtmlHelper 类上的扩展方法全局执行帮助程序。这将比 JS 执行得多,但根据您的情况可能会有点笨拙。
由于有很多元素不应该被选项卡,而是为它们禁用 TAB 键,我更改了具有 tabIndex, onkey 按下的元素的默认行为:
1) 我取了所有 tabIndex 大于 0 的元素:
var tabbables = document.querySelectorAll("input[tabindex], textarea[tabindex]");
这是一个简化版本,您应该进行可见性检查并选择其他类型的元素(例如按钮等)
2) 我在 2 种情况下替换了默认行为:按下 TAB 并选择具有选项卡索引的最后一个元素或按下 SHIFT+TAB 并选择第一个元素。对于这些情况,我将重点放在第一个元素上,分别放在最后一个元素上。
一个类似的问题有一个很好的答案(不是公认的答案,得票最多的答案)在这里:“Focus Next Element In Tab Index”