sai*_*int 2 html javascript forms
尊重所有,
我有一个HTML表单,其中包含不同的控件,如文本框和复选框.我想在用户按下ENTER键时将焦点从一个控件移动到下一个控件,而不使用该tabindex
属性.
可能吗?
您可以通过挂钩keypress
并查找Enter键,然后导航DOM以查找下一个字段来完成此操作.模糊地像这样(实时复制):
window.onload = function() {
var form,
index;
// Get the form
form = document.getElementById('theForm')
// Hook the keypress event on all its inputs
for (index = 0; index < form.elements.length; ++index) {
hookEvent(form.elements[index], 'keypress', elementKeypressHandler);
}
// Our handler for keypresses
function elementKeypressHandler(event) {
var keyCode,
next,
tryFirst;
// Handle IE/standards variance
event = event || window.event;
// Get the keycode
keyCode = event.keyCode || event.which;
// If Enter...
if (keyCode == 13) {
// Find the next field; if we run out of fields, try
// from the beginning
tryFirst = true;
next = this.nextSibling;
while (next && (next.nodeType != 1 || next.tagName != "INPUT")) {
next = next.nextSibling;
if (!next && tryFirst) {
tryFirst = false;
next = this.parentNode.firstChild;
}
}
// If we have one, focus it
if (next && next !== this) {
next.focus();
}
}
}
// Handle IE vs. standards for DOM2 event hookup
function hookEvent(element, event, handler) {
if (element.addEventListener) {
element.addEventListener(event, handler, false);
}
else if (element.attachEvent) {
element.attachEvent("on" + event, handler);
}
else {
element["on" + event] = handler;
}
return element;
}
};?
Run Code Online (Sandbox Code Playgroud)
题外话:这东西是很多更容易,如果你使用像库jQuery的,原型,YUI,关闭,或任何其他几个人的,以消除你的浏览器的差异,并使其更容易遍历DOM.例如,在上面,我不得不考虑不同浏览器之间至少有三个差异,我必须使用循环来找到要关注的下一个(或第一个)元素,跳过非Element节点.库将帮助您避免编写重复的代码并专注于您实际想要做的事情.