JavaScript 函数分配 tabindex 数字?
我有一个包含许多字段的表单,并且我已经为每个输入、选择和按钮提供了一个选项卡索引号。这可行,但我想以编程方式完成。
默认的 tabindex 顺序不正确,因为我有一个两列布局,每列都有组。我想按组自上而下进行。如何编写 body.onload 函数,以便它根据包含的 div 为所有输入、选择和按钮标签分配 tabindex 编号?例如,对于我想要首先循环的 div,所有输入、选择和按钮标签都可以有一个 tabindex=1
,并且第二个 div 中的所有输入、选择和按钮标签都可以有 tabindex=2
等等。
谢谢!
这是一个简化的例子
<style>
.a { display: inline-block;
width:200px;
border: 1px solid black;
}
</style>
<div class="a">
<div id="Div01" title="these inputs should have tabindex=1">
<p>Div 01</p>
<input id="Div01Field1" type="text" value="Me first"/>
<input id="Div01Field3" type="text" value="Me second"/>
<input id="Div01Field2" type="text" value="Me third"/>
<hr>
</div>
<div id="Div03" title="these inputs should have tabindex=3">
<p>Div 03</p>
<input id="Div03Field1" type="text" value="Me seventh"/>
<input id="Div03Field2" type="text" value="Me eighth"/>
<input id="Div03Field3" type="text" value="Me ninth"/>
<hr>
</div>
<div id="Div05" title="these inputs should have tabindex=5">
<p>Div 05</p>
<input id="Div05Field1" type="text" value="Me thirteenth"/>
<input id="Div05Field2" type="text" value="Me fourteenth"/>
<input id="Div05Field3" type="text" value="Me fifteenth"/>
</div>
</div>
<div class="a">
<div id="Div02" title="these inputs should have tabindex=2">
<p>Div 02</p>
<input id="Div02Field1" type="text" value="Me fourth"/>
<input id="Div02Field2" type="text" value="Me fifth"/>
<input id="Div02Field3" type="text" value="Me sixth"/>
<hr>
</div>
<div id="Div04" title="these inputs should have tabindex=4">
<p>Div 04</p>
<input id="Div04Field1" type="text" value="Me tenth"/>
<input id="Div04Field2" type="text" value="Me eleventh"/>
<input id="Div04Field3" type="text" value="Me twelfth"/>
<hr>
</div>
<div id="Div06" title="these inputs should have tabindex=6">
<p>Div 06</p>
<input id="Div06Field1" type="text" value="Me sixteenth"/>
<input id="Div06Field2" type="text" value="Me seventeenth"/>
<input id="Div06Field3" type="text" value="Me eighteenth"/>
</div>
</div>
I have a form with many fields and I have given every single input, select and button a tabindex number. That works, but I'd like to do it programatically.
The default tabindex order isn't correct because i have a two-column layout with groups in each column. I want to go top-down by group. How can I write a body.onload function so that it would assign all input, select and button tags a tabindex number based upon the containing div? For example, for the div I want to be cycled through first, all the input, select and button tags could have a tabindex=1
, and all the input, select and button tags in the second div could have tabindex=2
, and so on.
Thanks!
Here's a simplified example
<style>
.a { display: inline-block;
width:200px;
border: 1px solid black;
}
</style>
<div class="a">
<div id="Div01" title="these inputs should have tabindex=1">
<p>Div 01</p>
<input id="Div01Field1" type="text" value="Me first"/>
<input id="Div01Field3" type="text" value="Me second"/>
<input id="Div01Field2" type="text" value="Me third"/>
<hr>
</div>
<div id="Div03" title="these inputs should have tabindex=3">
<p>Div 03</p>
<input id="Div03Field1" type="text" value="Me seventh"/>
<input id="Div03Field2" type="text" value="Me eighth"/>
<input id="Div03Field3" type="text" value="Me ninth"/>
<hr>
</div>
<div id="Div05" title="these inputs should have tabindex=5">
<p>Div 05</p>
<input id="Div05Field1" type="text" value="Me thirteenth"/>
<input id="Div05Field2" type="text" value="Me fourteenth"/>
<input id="Div05Field3" type="text" value="Me fifteenth"/>
</div>
</div>
<div class="a">
<div id="Div02" title="these inputs should have tabindex=2">
<p>Div 02</p>
<input id="Div02Field1" type="text" value="Me fourth"/>
<input id="Div02Field2" type="text" value="Me fifth"/>
<input id="Div02Field3" type="text" value="Me sixth"/>
<hr>
</div>
<div id="Div04" title="these inputs should have tabindex=4">
<p>Div 04</p>
<input id="Div04Field1" type="text" value="Me tenth"/>
<input id="Div04Field2" type="text" value="Me eleventh"/>
<input id="Div04Field3" type="text" value="Me twelfth"/>
<hr>
</div>
<div id="Div06" title="these inputs should have tabindex=6">
<p>Div 06</p>
<input id="Div06Field1" type="text" value="Me sixteenth"/>
<input id="Div06Field2" type="text" value="Me seventeenth"/>
<input id="Div06Field3" type="text" value="Me eighteenth"/>
</div>
</div>
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
Mike 代码的更灵活版本,它将 tabIndex 设置为 Div id 中使用的数字。当您更改页面结构时,这也不需要修改。
任何没有 id 或 id 与前缀数字模式不匹配的 div 都会被忽略。
经过一番讨论后,规范被修改,以下代码被接受:
在 Chrome 上测试
A more flexible version of Mike's code which sets the tabIndex to the number used in the Div id's. This also needs no modification when you change the page structure.
Any div with no id or with an id which does not match the prefix-number pattern is ignored.
After some discussion the spec was modified and the following code was accepted :
Tested on Chrome
如果容器
Div01
等可以像您的示例一样具有可排序的 ID,那么您可以执行此jquery 解决方案
演示 http://jsfiddle.net/gaby/sNekS/
或者 (< em>可能还有更多正确)您可以重新排列您的 div,以便它们在源中正确排序,并且在渲染时仍然显示在左/右组中(在内部 div 上使用
float:left
),并且根本不使用任何脚本。演示位于 http://jsfiddle.net/gaby/sNekS/1/
Vanilla Javascript 解决方案 (添加类
group< 后/code> 到
Div##
元素,类input
到 input/select/etc 元素)演示位于 <一href="http://jsfiddle.net/gaby/sNekS/3/" rel="nofollow">http://jsfiddle.net/gaby/sNekS/3/
If the containers
Div01
etc can have sortable ids like in your example then you can do thisjquery solution
Demo at http://jsfiddle.net/gaby/sNekS/
Alternatively (and likely more correctly) you can just rearrange your divs so that they are correctly sorted in the source and still show in left/right groups when rendered (using
float:left
on the inner divs), and use no scripting at all..Demo at http://jsfiddle.net/gaby/sNekS/1/
Vanilla Javascript solution (after adding class
group
to theDiv##
elements and classinput
to the input/select/etc elements)Demo at http://jsfiddle.net/gaby/sNekS/3/
假设您正在使用 Prototype(您可能没有),它看起来像这样:
注意:未经测试
Assuming that you're using Prototype (which you probably aren't), it would look like this :
Note: untested