动态添加tabindex

时间:2013-02-27 21:46:24

标签: jquery

我想将tabindex添加到所有表单元素中。表单是动态的,我无法将其添加到HTML中。我想将它作为一个函数运行。如果有多个具有相同名称的单选按钮,则每个单选按钮必须具有自己的tabindex值。页面上的大多数表单元素都以INPUT开头,SELECT除外。我该如何解释?

我想我需要运行循环并添加属性,对吗?

var n = 1; 

$('input, select').each(function() {               
    $(this).attr('tabindex', n++);
});

4 个答案:

答案 0 :(得分:42)

奇怪的问题,但是这是基本的想法:

$(":input:not(:hidden)").each(function (i) { $(this).attr('tabindex', i + 1); });

这使用:input来获取包括按钮和文本区域在内的所有内容。 :not(:hidden)只会排除隐藏的输入,以避免不必要的标签。

答案 1 :(得分:8)

最好避免使用n++设置不同的tabindex数字。

相反,请尝试将tabindex设置为0

$(':input:visible').each(function() {               
    $(this).attr('tabindex', '0');
});
  

tabindex="0"表示该元素在顺序键盘导航中应该是可聚焦的,但是其顺序由文档的源顺序定义。   ~ developer.mozilla.org

:input选择器基本上选择了所有表单控件。

:visible选择器基本上选择所有可见的元素。

答案 2 :(得分:0)

在这里,我描述了如何通过 jquery 动态添加 aria-selected 和 tabindex 值。我还想了解可访问性如何与 tablist、tab 和 tabpanel 角色一起使用以及 aria 属性如何工作。希望对这段代码有所帮助:

 var $tabs = $('.tabs');
 var $panels = $('.panel');

 $tabs.on('click', 'a', function (e) {
 e.preventDefault();
  var id = $(this).attr('href');

  // Find the currently visible tab and panel and hide them
$tabs.find('[aria-selected="true"]').attr({
            'aria-selected': false,
            'tabindex': -1
        });
   $(this).attr({
            'aria-selected': true,
            'tabindex': 0
        });
});

标签包装器:-

<ul class="tabs" role="tablist">
  <li role="presentation"><a href="#tab-1" role="tab" aria-controls="tab-1" aria-selected="true">Tab 1</a></li>
  <li role="presentation"><a href="#tab-2" role="tab" aria-controls="tab-2">Tab 2</a></li>
  <li role="presentation"><a href="#tab-3" role="tab" aria-controls="tab-3">Tab 3</a></li>
</ul>

<div class="tab-panels">
  <div class="panel" id="tab-1" role="tabpanel" aria-hidden="false">…</div>
  <div class="panel" id="tab-2" role="tabpanel" aria-hidden="true">…</div>
  <div class="panel" id="tab-3" role="tabpanel" aria-hidden="true">…</div>
</div>

答案 3 :(得分:0)

一种方法是将 DOM 中的元素移到更高的位置。与较低的元素相比,DOM 树顶部的元素将首先使用制表符获得焦点。