エンターキーで次のフォームにフォーカスする

<!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">
//@cc_on

var AutoNextForm = function () {
  document./*@if (@_jscript) attachEvent ('on' + @else@*/ addEventListener (/*@end@*/
    'keypress', AutoNextForm.Listener, false);

  /*@if (@_jscript) attachEvent( 'on' + @else@*/ addEventListener( /*@end@*/
    '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./*@if (@_jscript) srcElement @else@*/ target /*@end@*/;
    if (! /INPUT|TEXTAREA|SELECT/.test(target.nodeName)) return 

    var keyCode = evt./*@if (@_jscript) keyCode @else@*/ which /*@end@*/;
    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./*@if(@_jscript) returnValue = false @else@*/ preventDefault() /*@end@*/;
    }

};

AutoNextForm.Finalizer = function (evt) {
  document./*@if (@_jscript) detachEvent ('on' + @else@*/ removeEventListener (/*@end@*/
    'keypress', AutoNextForm.Listener, false);

  /*@if (@_jscript) detachEvent ('on' + @else@*/ removeEventListener (/*@end@*/
    'unload', AutoNextForm.Finalizer, false);
};

//____

AutoNextForm();

</script>
</body>