<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
<title>エンターキーで、次のフォームに移動してみる</title>
<body>
<form action="#" method="post">
<p id="q1"><input type="text" name="a0"></p>
<p id="q2">
<input type="radio" name="a1">abc
<input type="hidden" value="abc">
<input type="radio" name="a1">def
</p>
<p id="q3">
<input type="text" name="a3">
<input type="checkbox" name="a4">
</p>
<p>
<input type="button" name="a5" value="test" onclick="alert('ok')">
</p>
<p>
<textarea cols="70" rows="6">
困ったときの解決策は、みんなが共有できる財産となる。
その財産を見つけるための道を、迷路のようにするべきではない。
つまり、同じような質問を、複数かかげるのは、迷路を作っているのと
同じこと。質問を閉じないのを見ると腹立たしい思いがする。
今後同じように困った人が、探してたどり着いたら、解決にいたらない
質問だらけで、解決策にたどり着けなかったら、悲しくない?
</textarea>
</p>
<p id="q5">
<input type="text" name="a6">
<input type="checkbox" name="a7">
</p>
</form>
<script type="text/javascript">
var AutoNextForm = function () {
document. addEventListener (
'keypress', AutoNextForm.Listener, false);
addEventListener(
'unload', AutoNextForm.Finalizer, false);
};
AutoNextForm.nextElement = function (node) {
var n;
do {
n = node;
while (n = n.firstChild || n.nextSibling)
if ((/INPUT|SELECT|TEXTAREA/.test(n.nodeName)) &&
! ('INPUT' === n.nodeName && 'hidden' === n.type) ) return n;
do n = (node = node.parentNode) ? node.nextSibling: null; while (node && !n)
} while (node = n)
return null;
}
AutoNextForm.Listener = function (evt) {
var target = evt. target ;
if (! /INPUT|TEXTAREA|SELECT/.test(target.nodeName)) return
var keyCode = evt. which ;
var shift = evt.shiftKey;
var e;
if (27 === keyCode) {
target.blur();
}
if (13 === keyCode) {
if ('INPUT' === target.nodeName && /submit|reset|button/.test(target.type) && shift) return;
if ('TEXTAREA' === target.nodeName && !shift) return;
e = AutoNextForm.nextElement(target);
e && e.focus();
evt. preventDefault() ;
}
};
AutoNextForm.Finalizer = function (evt) {
document. removeEventListener (
'keypress', AutoNextForm.Listener, false);
removeEventListener (
'unload', AutoNextForm.Finalizer, false);
};
AutoNextForm();
</script>
</body>