avaScript键盘上下左右控制文本框焦点的方法有很多,这里简单说两种方法:

方法一:

创建一个table的dom元素,包含5行4列的文本框

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">  
    <html>  
      <head>      
        <title>keyboard control 1</title>      
        <style>  
            tr.highlight{background:#08246B;color:white;}  
        </style>  
      </head>    
      <body>  
    <table border="1" width="70%" id="ice">  
        <tr>  
            <td><input type='text'></td>  
            <td><input type='text'></td>  
            <td><input type='text'></td>  
            <td><input type='text'></td>  
        </tr>  
        <tr>  
            <td><input type='text'></td>  
            <td><input type='text'></td>  
            <td><input type='text'></td>  
            <td><input type='text'></td>  
        </tr>  
        <tr>  
            <td><input type='text'></td>  
            <td><input type='text'></td>  
            <td><input type='text'></td>  
            <td><input type='text'></td>  
        </tr>  
        <tr>  
            <td><input type='text'></td>  
            <td><input type='text'></td>  
            <td><input type='text'></td>  
            <td><input type='text'></td>  
        </tr>  
        <tr>  
            <td><input type='text'></td>  
            <td><input type='text'></td>  
            <td><input type='text'></td>  
            <td><input type='text'></td>  
        </tr>  
    </table>  
    <script language="javascript">  
    <!--  
    //定义初始化行列  
    var currentLine=0;  // 目前的行号  
    var currentCol=0;  
     var objtab=document.all.ice;  
     var colums = objtab.rows[4].cells.length;  
    var objrow=objtab.rows[0].getElementsByTagName("INPUT");  
     objrow[0].select();  
    document.body.onkeydown=function(e){  
      e=window.event||e;  
      switch(e.keyCode){  
        case 37: //左键  
          currentCol--;  
          changeItem(e);  
          break;  
        case 38: //向上键  
          currentLine--;  
          changeItem(e);  
          break;  
        case 39: //右键  
          currentCol++;  
          changeItem(e);  
          break;  
        case 40: //向下键  
          currentLine++;  
          changeItem(e);  
          break;  
        default:  
          break;  
      }  
    }  
    //方向键调用  
    function changeItem(e){  
      if(document.all){//如果是IE  
        var it=document.getElementById("ice").children[0];   //获取table表单元素  
      }else{//其他浏览器  
        var it=document.getElementById("ice");  
      }  
         
     if(e.keyCode==37||e.keyCode==39){  
        if(currentLine<0){//如果行小于0  
            currentLine=it.rows.length-1;  
          }  
          if(currentLine==it.rows.length){  
           currentLine=0;  
          }  
          var objtab=document.all.ice;  
          var objrow=objtab.rows[currentLine].getElementsByTagName("INPUT");  
            
           
          if(currentCol<0){  
             
            if(e.keyCode==37){  
                currentLine--;  
                if(currentLine<0){//如果行小于0  
                    currentLine=it.rows.length-1;  
                 }  
                objrow=objtab.rows[currentLine].getElementsByTagName("INPUT");    
            }  
            currentCol=objrow.length-1;  
          }  
            
          if(currentCol>=objrow.length){  
            if(e.keyCode==39){  
                currentLine++;  
                 if(currentLine==it.rows.length){  
                  currentLine=0;  
                  }   
                  objrow=objtab.rows[currentLine].getElementsByTagName("INPUT");      
            }  
            currentCol=0;    
              
          }    
     }else{  
        if(currentLine<0){//如果行小于0  
            currentLine=it.rows.length-1;  
            currentCol--;  
            if(currentCol<0){  
                currentCol=colums-1;  
            }  
          }  
          if(currentLine==it.rows.length){  
             currentLine=0;  
             currentCol++;  
             if(currentCol>=colums){  
                currentCol=0;  
             }  
          }  
          var objtab=document.all.ice;  
          var objrow=objtab.rows[currentLine].getElementsByTagName("INPUT");  
          while(e.keyCode==40&&objrow[currentCol]==undefined){  
            currentLine++;  
            objrow=objtab.rows[currentLine].getElementsByTagName("INPUT");        
          }  
          while(e.keyCode==38&&objrow[currentCol]==undefined){  
            currentLine--;        
            objrow=objtab.rows[currentLine].getElementsByTagName("INPUT");    
          }  
            
     }    
      objrow[currentCol].select();  
    }  
    //-->  
    </script>  
      </body>  
    </html>

基本思路是获取表单的行列数,监听键盘操作,通过DOM操作表格的行列来选取表格内的文本框。

方法二:

这个方法试用于动态创建多个文本框的情况,将所有的文本框划分为行列数组,为每个input设置id值,监听键盘操作设置,设置onmouseup方法获取当前鼠标位置,然后游当前位置确认数组的下一个相应文本框,将其选中。这里以简单粗糙的方式呈现基本思路

[html] view plain copy

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">  
    <html>  
      <head>      
        <title>keyborad control 2</title>      
        <style>  
            tr.highlight{background:#08246B;color:white;}  
        </style>  
      </head>    
      <body>  
    <table border="1" width="70%" id="ice">  
        <tr>  
            <td><input id="td11" onmouseup=getMouse(1,1) ></td>  
            <td><input id="td12" onmouseup=getMouse(1,2)></td>  
            <td><input id="td13" onmouseup=getMouse(1,3)></td>  
            <td><input id="td14" onmouseup=getMouse(1,4)></td>  
        </tr>  
        <tr>  
            <td><input id="td21" onmouseup=getMouse(2,1)></td>  
            <td><input id="td22" onmouseup=getMouse(2,2)></td>  
            <td><input id="td23" onmouseup=getMouse(2,3)></td>  
            <td><input id="td24" onmouseup=getMouse(2,4)></td>  
        </tr>  
        <tr>  
            <td><input id="td31" onmouseup=getMouse(3,1)></td>  
            <td><input id="td32" onmouseup=getMouse(3,2)></td>  
            <td><input id="td33" onmouseup=getMouse(3,3)></td>  
            <td><input id="td34" onmouseup=getMouse(3,4)></td>  
        </tr>  
    </table>  
    <script language="javascript">  
    <!--  
        var mouseInfo={};      //存放鼠标的当前位置  
        var moveArray=new Array();     //存放文本框数组  
        for(var i=1;i<4;i++){  
            moveArray[i]=new Array();  
            for(var j=1;j<5;j++){  
                moveArray[i][j]="td"+i+j;  
            }  
        }  
          
        document.body.onkeydown=function(e){  //监听鼠标操作  
          e=window.event||e;  
          switch(e.keyCode){  
            case 37: //左键  
              moveLeft();  
              break;  
            case 38: //向上键  
              moveUp();  
              break;  
            case 39: //右键  
              moveRight();  
              break;  
            case 40: //向下键  
              moveDown();  
              break;  
            default:  
              break;  
          }  
        }  
          
          
    function getMouse(l,k){//鼠标所在位置  
        mouseInfo["row"]=l;  
        mouseInfo["col"]=k;  
    }  
    function moveLeft(){    
        var row=mouseInfo["row"];  
        var col=mouseInfo["col"];  
          
        var key=moveArray[row][col-1];  
        if(document.getElementById(key)!=undefined)  
        {  
            var textFiled=document.getElementById(key);  
            textFiled.focus(false, 1000);  
            textFiled.select();  
            mouseInfo["col"]=col-1;  
        }  
      
    }  
    function moveRight(){  
        var row=mouseInfo["row"];  
        var col=mouseInfo["col"];  
          
        var key=moveArray[row][col+1];  
        if(document.getElementById(key)!=undefined)  
        {  
            var textFiled=document.getElementById(key);  
            textFiled.focus(false, 1000);  
            textFiled.select();  
            mouseInfo["col"]=col+1;  
        }  
    }  
    function moveUp(){  
        var row=mouseInfo["row"];  
        var col=mouseInfo["col"];  
          
        var key=moveArray[row-1][col];  
        if(document.getElementById(key)!=undefined)  
        {  
            var textFiled=document.getElementById(key);  
            textFiled.focus(false, 1000);  
            textFiled.select();  
            mouseInfo["row"]=row-1;  
        }     
    }  
    function moveDown(){  
        var row=mouseInfo["row"];  
        var col=mouseInfo["col"];  
          
        var key=moveArray[row+1][col];  
        if(document.getElementById(key)!=undefined)  
        {  
            var textFiled=document.getElementById(key);  
            textFiled.focus(false, 1000);  
            textFiled.select();  
            mouseInfo["row"]=row+1;  
        }     
    }  
          
    //-->  
    </script>  
      </body>  
    </html>

JS控制文本框内键盘上下左右键的焦点的更多相关文章

  1. JS控制文本框禁止输入特殊字符

    JS 控制不能输入特殊字符<input type="text" class="domain" onkeyup="this.value=this. ...

  2. js控制文本框只能输入中文、英文、数字与指定特殊符号.

    先在'' 里输入 onkeyup="value=value.replace(/[^\X]/g,'')" 然后在(/[\X]/g,'')里的 X换成你想输入的代码就可以了, 中文u4 ...

  3. JS 控制文本框只能输入中文、英文、数字与指定特殊符号

    想做姓名输入的js判断是否是中文,但是网上找的很多是源于一篇文章的,判断中文的正则式不对,后来找到一个可以准确判断了,但是是监测里面有中文的就行,跟我想要的只能输入中文的意思相左,所以又找了下面的 J ...

  4. JS控制文本框中的密码显示/隐藏功能

    <html> <head> <title>[荐]JS控制文本框中的密码显示/隐藏功能_网页代码站(www.6a8a.com)</title> <s ...

  5. js控制文本框仅仅能输入中文、英文、数字与指定特殊符号

    JS 控制文本框仅仅能输入数字 <input onkeyup="value=value.replace(/[^0-9]/g,'')"onpaste="value=v ...

  6. JS 控制文本框禁止输入例子

    JS 控制不能输入特殊字符 <input type="text"class="domain"onkeyup="this.value=this.v ...

  7. JS控制文本框输入的内容

    总而言之:   先在‘<input>’ 里输入      onkeyup="value=value.replace(/[^\X]/g,'')" 然后在(/[\X]/g, ...

  8. js 控制文本框输入要求

    把输入框中 输入的字符串含有中文逗号 改成 英文逗号 举例: <input type="text" id="keywords" style="w ...

  9. JS控制文本框textarea输入字数限制

    <html> <head> <title>JS限制Textarea文本域字符个数</title> <meta http-equiv="C ...

随机推荐

  1. CSS面试复习(二):CSS的使用

    一.CSS基础 1.选择器 选择器{ 属性:值: 属性:值 } 作用:用于匹配HTML元素.分类和权重.解析方式和性能.值得关注的选择器 分类: 元素选择器a{} 伪元素选择器::before{} 类 ...

  2. nginx 完成缓存清除 以及升级包的自动升级

    #!/bin/bash function cache(){ for i in `curl xxx.fe.xxx.cn/uplist.txt`;do url=`echo $i|awk -F"# ...

  3. Python 20 Ajax全套

    概述 对于web应用程序:用户浏览器发送请求,服务器接收并处理请求,然后返回结果,往往返回就是字符串(HTML),浏览器将字符串(HTML)渲染并显示浏览器上. 1.传统的Web应用 一个简单操作需要 ...

  4. proxysql 系列 ~ 读写分离核心功能

    一 相关表介绍 1 mysql_user 列表配置    1 username && password 账号密码    2 default_hostgroup 默认的组ID2 mysq ...

  5. mysql 原理 ~ 死锁问题

    一 锁1 锁的定义   1 按照宏观角度     共享锁[S锁]     又称读锁,若事务T对数据对象A加上S锁,则事务T可以读A但不能修改A,其他事务只能再对A加S锁,而不能加X锁,直到T释放A上的 ...

  6. 简单日历dom

    <!DOCTYPE html><html> <head> <meta charset="UTF-8"> <title> ...

  7. Css - 字体图标

    Css - 字体图标 字体格式 ttf.otf.woff.svg.eot 现在流行将图标做成矢量的字体格式的文档,很多用户在放大页面的时候页面上的普通图片格式的图标就会变得模糊不清,这种字体图标在网页 ...

  8. SpringBoot的Session并发控制

    ⒈是什么? 即控制业务系统中一个用户只能有一个Session ⒉解决方案 1.当这个用户在其它地方登录的时候,把之前的Session失效掉. package cn.coreqi.security.co ...

  9. 【转】python操作excel表格(xlrd/xlwt)

    [转]python操作excel表格(xlrd/xlwt) 最近遇到一个情景,就是定期生成并发送服务器使用情况报表,按照不同维度统计,涉及python对excel的操作,上网搜罗了一番,大多大同小异, ...

  10. 自学MVC看这里——全网最全ASP.NET MVC 教程汇总(转)

    自学MVC看这里——全网最全ASP.NET MVC 教程汇总   MVC架构已深得人心,微软也不甘落后,推出了Asp.net MVC.小编特意整理博客园乃至整个网络最具价值的MVC技术原创文章,为想要 ...