输入框有个属性maxlength,可以限制输入框的长度,例如下面是限制只能输两位:
<input type="text" id="SiteTextBox" maxlength="2" />原来的程序是用户在输入框中输好数据后,按回车键,跳到下一个输入框。
原来的代码:
    <script type="text/javascript" language="javascript" for="document" event="onkeydown">
      //把Enter键转换为TAB键
      if(event.keyCode==13 && event.srcElement.type=='text')
      {
            event.keyCode=9;
      }
    </script>-------------------------------------------------------------------------------------------------------
现在用户要求,两种情况:
1.如果位数没有输满,按回车跳到下一个输入框。这个我知道如何实现。
2.如果位数输满,不要回车,就直接跳到下一个输入框。例如上面maxlenth="2",用户输了两位数据后,直接跳到下一个输入框。对于第二种情况,我不知道如何做?因为不能把用户输入的键值转换为Enter!   是不是附加一个事件出来?

解决方案 »

  1.   

    可以给这个文本框加个onblur事件,判断他输入的长度。
    如果到2了。
    就document.getElementById('第二个文本框').focus();
      

  2.   

    如果已经触发了onblur事件,我还提问吗?
    页面上有四百多个输入框,如果使用getElementById('第二个文本框'),要写死人。
      

  3.   

    很简单,为 <input type="text"> 添加 onkeyup 事件处理,判断长度并跳转即可!
      

  4.   

    你把文本框的id按规则编号 例如  id_rowIndex_cellIndex  
      

  5.   

    jquery的,方便楼主运行!
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <title></title>
        <script src="Scripts/jquery-1.4.1.min.js" type="text/javascript"></script>
    </head>
    <body>
        <input type="text" id="SiteTextBox" maxlength="2" />
        <input type="text" id="txt" />
    </body>
    </html>
    <script>
        $(function () {
            $("#SiteTextBox").keyup(function () {
                if ($("#SiteTextBox").val().length == 2) {
                    $("#txt").focus();
                }
            });
        });
    </script>
      

  6.   

    刚刚忘记注释
    <script>
      $(function () {
      //跟id为SiteTextBox的文本框,绑定键盘离开事件
      $("#SiteTextBox").keyup(function () {
      //判断用户输入的内容的长度。
      if ($("#SiteTextBox").val().length == 2) {
      //获取光标
      $("#txt").focus();
      }
      });
      });
    </script>
      

  7.   

    可以添加 onkeyup 事件,判断长度也没问题。请问:如何知道哪个输入框是下一个(页面上有很多输入框,不可能直接写名字)。
      

  8.   

    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
      <title></title>
      <script type="text/javascript">
       function nextIptFocus(obj){
    if(obj.value.length>=2)
    document.getElementById("txt").focus();
    }
      </script>
    </head>
    <body>
      <input type="text" id="SiteTextBox" maxlength="2" onkeyup="nextIptFocus(this)"/>
      <input type="text" id="txt" />
    </body>
    </html>
      

  9.   

    页面上有几百个字段,不可能用document.getElementById("名字").focus()来设焦点。
    难就难在这里,怎么跳到下一个。

      

  10.   

    简单实现了,同时满足两种情况,完全满足用户需求!L@_@K
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <title>dhtml.AutoFocusSwitch.html</title>
        <meta http-equiv="content-type" content="text/html; charset=utf-8" />
        <meta name="generator" content="editplus" />
        <meta name="author" content="[email protected]" />
        <meta name="keywords" content="" />
        <meta name="description" content="" />
    </head><body>
        <table>
            <tr>
                <td>指标一:</td>
                <td><input type="text" maxlength="2" /></td>
            </tr>
            <tr>
                <td>指标二:</td>
                <td><input type="text" maxlength="10" /></td>
            </tr>
            <tr>
                <td>指标三:</td>
                <td><input type="text" maxlength="5" /></td>
            </tr>
            <tr>
                <td>指标四:</td>
                <td><input type="text" maxlength="2" /></td>
            </tr>
        </table>
    </body>
    <script type="text/javascript">
    <!--function GetAllTextBox() {
        var inputs = document.getElementsByTagName("input");
        var tbxArray = new Array();
        var len = inputs.length;
        for (var i=0; i<len; i++)
        {
            if (inputs[i].type == "text")
                tbxArray.push(inputs[i]);
        }
        return tbxArray;
    }var tbxArray = GetAllTextBox();
    var len = tbxArray.length - 1;
    for (var i=0; i<len; i++)
    {
        tbxArray[i].NextTextBox = tbxArray[i+1];
        tbxArray[i].onkeyup = function() {
            if(((this.value.length == this.maxLength) || (event.keyCode==13))
               && this.NextTextBox)
            {
                this.NextTextBox.focus();
            }
        };
    }
    //-->
    </script>
    </html>
      

  11.   


    你是怎么定义这几百个文本框的ID的
    难道不是SiteTextBox_1到SiteTextBox_400类似这样的?
      

  12.   

     你可以参考一下,这个是我以前写的按上下左右箭头控制光标,这个是无规则的,符合你的要求,但是建议你按id_rowIndex_cellIndex 规则把text编号,便于管理function okd(obj){ var code_value =event.keyCode; 
    //判断按?是否? --> 
    if(code_value==39){ 
     
    for(var i=obj.parentNode.parentNode.cellIndex;i<obj.parentNode.parentNode.parentNode.childNodes.length;i++){
      
    var next=obj.parentNode.parentNode.parentNode.childNodes[i+1].childNodes[0].childNodes[0];if(next.nodeType!=3&&next.type!="checkbox"){  break;
    }//如果是最后一个text,判断是否到了最后一个节点
    if(next.parentNode.parentNode.cellIndex==(obj.parentNode.parentNode.parentNode.childNodes.length-1)){
    //进入下一行继续循环遍历;
     for(var j=0;j<obj.parentNode.parentNode.parentNode.childNodes.length;j++){
     var row=obj.parentNode.parentNode.parentNode.rowIndex+1;//当前行的下一行
     //判断该列的第一个节点是否有孩子节点(因为页面的text固定格式为<td><div><text></div><td>)
     if(obj.parentNode.parentNode.parentNode.parentNode.rows[row].cells[j].childNodes[0].hasChildNodes()){
      next=obj.parentNode.parentNode.parentNode.parentNode.rows[row].cells[j].childNodes[0].childNodes[0];
    //alert(next.parentNode.id);
    //判断是否是一行文本(一行字)或者该节点是否是一个checkbox
    if(next.nodeType!=3&&next.type!="checkbox"){
    //alert("!!");
      break;
     
    }
    }
    }
    next.focus();
    }}next.focus();
    }
    //左移
    if(code_value==37){ 
     for(var i=obj.parentNode.parentNode.cellIndex;i>0;i--){
      if(obj.parentNode.parentNode.parentNode.childNodes[i-1].childNodes[0].hasChildNodes()){
     var next=obj.parentNode.parentNode.parentNode.childNodes[i-1].childNodes[0].childNodes[0];
      var index=obj.parentNode.parentNode.parentNode.childNodes[i-1].cellIndex;
         if(next.nodeType!=3&&next.type!="checkbox"){     break;
        }
      }
      //判断是否已经遍历到了该行的第一个节点;如果是,则从上一行最后一个节点开始找;
      if(obj.parentNode.parentNode.parentNode.childNodes[i-1].cellIndex==0){
      //alert("");
      
       for(var j=obj.parentNode.parentNode.parentNode.childNodes.length-1;j>0;j--){
     var row=obj.parentNode.parentNode.parentNode.rowIndex-1;//当前行的上一行
     //判断该列的第一个节点是否有孩子节点(因为页面的text固定格式为<td><div><text></div><td>)
     if(obj.parentNode.parentNode.parentNode.parentNode.rows[row].cells[j].childNodes[0].hasChildNodes()){
      next=obj.parentNode.parentNode.parentNode.parentNode.rows[row].cells[j].childNodes[0].childNodes[0];
    //alert(next.parentNode.id);
    //判断是否是一行文本(一行字)或者该节点是否是一个checkbox
    if(next.nodeType!=3&&next.type!="checkbox"){
    //alert("!!");
      break;
     
    }
    }
    }
    next.focus();
      
      
      
      }
    }
    next.focus();
    }
    //上移
    if(code_value==38){   var i=obj.parentNode.parentNode.cellIndex;//单元格所在列数
      var row=obj.parentNode.parentNode.parentNode.rowIndex-1; //上移后单元格所在行数
     if(row>0){ var next=obj.parentNode.parentNode.parentNode.parentNode.rows[row].childNodes[i].childNodes[0].childNodes[0];
    }
    next.focus();
    }
    //下移
    if(code_value==40){ 
     var i=obj.parentNode.parentNode.cellIndex;
     var row=obj.parentNode.parentNode.parentNode.rowIndex+1;
     if(row!=obj.parentNode.parentNode.parentNode.parentNode.rows.length ){
     var next=obj.parentNode.parentNode.parentNode.parentNode.rows[row].childNodes[i].childNodes[0].childNodes[0];
    }
    next.focus();
    }
    }   本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/java_pengjin/archive/2010/11/09/5997427.aspx
      

  13.   

    看下俺在 #13 的回帖,几百个 textbox 不成问题!
      

  14.   

    想到了一个思路,不过不知道能不能实现。
    先在你的文本框上设置它的tabIndex属性(按顺序来),当你输入2位后就触发一个事件,该事件用于模拟敲击键盘tab键。这样焦点就会跳到下一个文本框了。
    该午休了,等有时间试下,看能不能行得同。。