0

我有一个包含多个页面的 asp.net MVC 项目。对于每个页面,我必须将 TAB 键设置为仅在某些控件之间进行。我知道我可以设置:

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

问题是我有 5 个 TAB 键应该工作的控件和 50 个不应该工作的控件(这些数字只是为了理解比例)。所以我想知道是否有一种方法可以禁用整个页面的 TAB 键(来自 *.css 或管理器),而不是只为需要它的几个特定控件启用它。

4

2 回答 2

0

据我所知,这不能像您希望的那样直接完成。您可以考虑做的是对所有未设置选项卡索引的元素执行 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 执行得多,但根据您的情况可能会有点笨拙。

于 2012-12-14T09:06:02.077 回答
0

由于有很多元素不应该被选项卡,而是为它们禁用 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”

于 2013-01-03T08:22:48.267 回答