【发布时间】:2016-06-19 11:43:46
【问题描述】:
我有一个表格,如下:
<FORM name="form1">
<TABLE onkeypress="focusNextFormElement(event)">
<TR>
<TD><INPUT name="SomeObscureName"></TD><TD>Some data</TD>
</TR>
<TR>
<TD><INPUT name="ThisName"><span>Here's some obscure text.</span></TD><TD>Some data</TD>
</TR>
<TR>
<TD><INPUT name="someNameIdontKnow"></TD><TD>Some data</TD>
</TR>
</TABLE>
</FORM>
有没有更好、更有效的方法来编写这个函数? (当然,这是一个简化的例子)
function focusNextFormElement(ev){
var el = ev.target;
var f = el.form;
var xx = f.elements.length - 1;
for(var x = 0; x < xx; x++){
if(f.elements[x] === el){
f.elements[x+1].focus();
}
}
}
这个表单上可能有数千个元素,我认为每次函数运行时都循环遍历它们并不是特别有效。
另外,我可以用鼠标任意选择输入,所以跟踪数组可能没有多大用处。
我无法控制页面的生成,因为它是一个油脂猴脚本,可帮助自动化另一个页面。
编辑 感谢@Trincot,从更广泛的角度来看,@Oriol 找到了答案。
function nextFormSibling(el){
var elems = el.form.elements;
var idx = [].indexOf.call(elems, el);
return elems[idx+1] || el;
}
function previousFormSibling(el){
var elems = el.form.elements;
var idx = [].indexOf.call(elems, el);
return elems[idx-1] || el;
}
【问题讨论】:
标签: javascript forms dom