我这是用左右方向监实现的
<body>
<center>
     <input type="reset" value="Test1"    name="a1">
     <input type="reset" value="Test2"    name="a2">
     <br/>    
     <input type="text" name="T1" onkeydown = "ReachNext(this)"value = 0>            
     <input type="text" name="T2" onkeydown = "ReachNext(this)"value = 1>        
     <input type="text" name="T3" onkeydown = "ReachNext(this)"value = 2>        
     <input type="text" name="T4" onkeydown = "ReachNext(this)"value = 3> 
     <br/>
     <input type="text" name="T5" onkeydown = "ReachNext(this)"value = 4>            
     <input type="text" name="T6" onkeydown = "ReachNext(this)"value = 5>        
     <input type="text" name="T7" onkeydown = "ReachNext(this)"value = 6>        
     <input type="text" name="T8" onkeydown = "ReachNext(this)"value = 7> 
     <br/>
     <input type="submit" value="Test3"  name="b1">        
     <input type="submit" value="Test4"  name="b2">          
</center>
</body>
<script>
//****************************************************
//*         ReachNext(NowText):生成两个只包含  *  
//*         Text 元素的数组,两个数组的元素互  *
//*         逆(Arr_Next()和Arr_Bef()),并且  *
//*         调用函数MoveNext(ArrName,TagName)  *
//*         来回在 Text 元素间移动光标  *
//*         参数:NowText:光标所在 Text的引用        *
//*         作者:月影飞鸿  2003/06/21               *
//****************************************************
function ReachNext(NowText)
{
 var i,j=0;
 var TextName;
 var Arr_All  = new Array();
 var Arr_Next = new Array();
 var Arr_Bef  = new Array();
 var Next_Len;
 
 KeyCode = event.keyCode;
 TextName = NowText.name;   
 Arr_All = document.getElementsByTagName("input");
 for (i = 0;i < Arr_All.length - 1 ; i++)
 {
   if (Arr_All[i].type == "text")
   {
    Arr_Next[j] = Arr_All[i];
    j = j + 1;
   }   
 }
 Next_Len = Arr_Next.length ;
 for (i = 0 , j = Next_Len - 1 ; i < Next_Len ; i++ , j--)
 {
  Arr_Bef[j] = Arr_Next[i]; 
 } 
 if (KeyCode == 39)
 {
    MoveNext(Arr_Next , TextName);
 }
 if (KeyCode == 37)
 { 
    MoveNext(Arr_Bef  , TextName);
 }}
//*****************************************************
//*     MoveNext(ArrName,TagName):移动到下一个 Text   *
//*     参数:ArrName:包含全部 Text 元素的数组        *
//*           TagName:光标所在 Text 元素的名字        *
//*****************************************************
function MoveNext(ArrName,TagName)
{
for (i = 0 ;i <ArrName.length-1;i++)
    {     
     if (TagName == ArrName[i].name)
    {
         eval("document.all."+ArrName[i+1].name+".focus()");
        return true;   
    }
    } 
if (TagName == ArrName[i].name)
{
       eval("document.all."+ArrName[0].name+".focus()");
    }
}</script>