TO:fantiny(乐于助人的菜鸟回归)
谢了TO:liufei8463(武汉小兵)
也谢了,虽然你没给什么提示或答案,但最起码给了我信心,google让我没信心了。

解决方案 »

  1.   

    <FORM name="testForm" METHOD=POST ACTION="">
    <input name="A01_1" type="text" maxlength="2" tabindex="1" onkeyup="AO1_keydown(this);" >
    <input name="A02_1" type="text" maxlength="4" tabindex="2" onkeyup="AO2_keydown(this);">
    <input name="A03_1" type="text" maxlength="2" tabindex="3"></FORM>
    <script language="javascript">
    <!--
    function AO1_keydown(obj)
    {
    if(obj.value.length==obj.getAttribute("maxlength"))
      testForm.A02_1.focus();
    }
    function AO2_keydown(obj)
    {
    if(obj.value.length==obj.getAttribute("maxlength"))
      testForm.A03_1.focus();
    }
    //-->
    </script>
    不知道是不是上面的效果
      

  2.   

    菜鸟来不及抢分,先抢座啊。
    参考这个:http://community.csdn.net/Expert/topic/5056/5056828.xml?temp=.294552
      

  3.   

    还没想到自动跳转到下一个tabindex的方法
      

  4.   

    TO: CutBug
    1。每个写fouse()我会,就是文本框太多了,不能每个来这样写,每个跳转不同,又得判断下一个是否disable,这个方法行不通
    2。就算用fouse(),你的也存一个问题,就是当AO2已填写过,再在A01框按tab到A02时(这时录入的数据反选了),你再录入其它数据看看(改不了原来的数据,光标跳走了)
      

  5.   

    等等看。如果不给每个input添加任何事件,貌似不太好搞。
      

  6.   

    得到下一个输入框的方法:
    nextSibling,ie6有效。<SCRIPT>
    // returns the list item labeled 'List Item 2'
    var oSibling = oList.childNodes(0).nextSibling;
    </SCRIPT><BODY>
    <UL ID = oList>
    <LI>List Item 1
    <LI>List Item 2
    <LI>List Item 3
    </UL>
    <BODY>
      

  7.   

    <input type="text" maxlength="3">
    <input type="text" maxlength="4">
    <input type="text" maxlength="5">
    <input type="text" maxlength="7">
    <script language="javascript">
    var text = document.getElementsByTagName("input");
    var j=0;
    for(var i=0;i<text.length;i++){
    if(text[i].type=="text"){
    j=i;
    text[i].index=i;
    text[j].nextIndex=i;
    text[i].onkeyup=function(){
    if(this.value.length==this.maxLength && event.keyCode!=8 && event.keyCode!=46 && !(event.keyCode>=37 && event.keyCode<=40))
    text[this.nextIndex+1].focus();
    }
    }
    }
    </script>以前有人写的,你看看。应该是个有bug的东西,你自己改一下。特别是隐藏控件的判断
      

  8.   

    TO myvicy(看着远方,走脚下的路。) :
    欢迎指教!TO yizia(椅子) :感谢,有nextSibling应该是好搞点。但不太可能要求客户全部在IE6以上。TO fantiny(乐于助人的菜鸟回归) :
    你提供的代码,昨天我已找到。它存在几个问题1.当AO2已填写过,再在A01框按tab到A02时(这时录入的数据反选了),你再录入其它数据看看(改不了原来的数据,光标跳走了),shift+光标也是
    2.到最后一个时,会报错,应可以单独写吧。
    3。循环设定,有时难以特殊处理。有没有更好的方法呢?
      

  9.   

    TO fantiny(乐于助人的菜鸟回归) :
    还有一个问题:
    4、就是下一个控件是disable时,也有问题。
      

  10.   

    <input type="text" maxlength="3">
    <input type="text" maxlength="4">
    <input type="text" maxlength="5">
    <input type="text" maxlength="7">
    <script language="javascript">
    var text = document.getElementsByTagName("input");
    var j=0;
    for(var i=0;i<text.length;i++){
    if(text[i].type=="text"){
    j=i;
    text[i].index=i;
    text[j].nextIndex=i;
    text[i].onkeyup=function(){
    if(event.keyCode==9)return;if(this.value.length==this.maxLength && event.keyCode!=8 && event.keyCode!=46 && !(event.keyCode>=37 && event.keyCode<=40))
    if(text[this.nextIndex+1])text[this.nextIndex+1].focus();
    }
    }
    }
    </script>1、当为tab时直接返回不用执行。
    2、不用另外写加一个判断就可以了。
    3、是什么意思呢?
      

  11.   

    <FORM name="testForm" METHOD=POST ACTION="">
    <input name="A01_1" type="text" maxlength="2" tabindex="1"  >
    <input name="A02_1" type="text" maxlength="4" tabindex="2" >
    <input name="A03_1" type="text" maxlength="2" tabindex="3"></FORM>
    <script language="javascript">
    <!--
    var len=testForm.length;
    testForm[0].onkeyup=function()
    {

    if(testForm[0].value.length==testForm[0].getAttribute("maxlength"))
    {
    for(var j=0;j<len;j++)
    {
    if(j!=0)
    {
    if(testForm[j].getAttribute("tabindex")==testForm[0].getAttribute("tabindex")+1 && event.keyCode!=9)
    {
    testForm[j].focus();
    }
    }
    }
    }
    }
    testForm[1].onkeyup=function()
    {
    if(testForm[1].value.length==testForm[1].getAttribute("maxlength"))
    {
    for(var j=0;j<len;j++)
    {
    if(j!=1)
    {
    if(testForm[j].getAttribute("tabindex")==testForm[1].getAttribute("tabindex")+1 && event.keyCode!=9)
    testForm[j].focus();
    }
    }
    }
    }testForm[2].onkeyup=function()
    {
    if(testForm[2].value.length==testForm[2].getAttribute("maxlength"))
    {
    for(var j=0;j<len;j++)
    {
    if(j!=1)
    {
    if(testForm[j].getAttribute("tabindex")==testForm[2].getAttribute("tabindex")+1 && event.keyCode!=9)
    testForm[j].focus();
    }
    }
    }
    }
    //-->
    </script>
      

  12.   

    如果有disable的情况:
    <FORM name="testForm" METHOD=POST ACTION="">
    <input name="A01_1" type="text" maxlength="2" tabindex="1"  >
    <input name="A02_1" type="text" maxlength="4" tabindex="2" disabled>
    <input name="A03_1" type="text" maxlength="2" tabindex="3"></FORM>
    <script language="javascript">
    <!--alert()
    var len=testForm.length;
    var q=1
    testForm[0].onkeyup=function()
    {

    if(testForm[0].value.length==testForm[0].getAttribute("maxlength"))
    {
    for(var j=0;j<len;j++)
    {
    if(j!=0)
    {
    if(testForm[j].getAttribute("tabindex")==testForm[0].getAttribute("tabindex")+q && event.keyCode!=9)
    {
    if(testForm[j].disabled)
    {
    q++;
    continue;
    }
    testForm[j].focus();
    }
    }
    }
    }
    }
    testForm[1].onkeyup=function()
    {
    if(testForm[1].value.length==testForm[1].getAttribute("maxlength"))
    {
    for(var j=0;j<len;j++)
    {
    if(j!=1)
    {
    if(testForm[j].getAttribute("tabindex")==testForm[1].getAttribute("tabindex")+q && event.keyCode!=9)
    {
    if(testForm[j].disabled)
    {
    q++;
    continue;
    }
    testForm[j].focus();
    }

    }
    }
    }
    }testForm[2].onkeyup=function()
    {
    if(testForm[2].value.length==testForm[2].getAttribute("maxlength"))
    {
    for(var j=0;j<len;j++)
    {
    if(j!=1)
    {
    if(testForm[j].getAttribute("tabindex")==testForm[2].getAttribute("tabindex")+q && event.keyCode!=9 )
    {
    if(testForm[j].disabled)
    {
    q++;
    continue;
    }
    testForm[j].focus();
    }
    }
    }
    }
    }
    //-->
    </script>
      

  13.   


    俺也凑个热闹!由于 JavaScript 无法模拟键盘点击事件!—— 谁要是知道能模拟键盘事件的话,一定告诉我!!!参考代码如下,已测试!
    <body>
    注册码:
    <input id="A01" type="text" maxlength="2" tabindex="1" size="2" groupname="regist">-
    <input id="A02" type="text" maxlength="4" tabindex="2" size="4" groupname="regist">-
    <input id="A03" type="text" maxlength="2" tabindex="3" size="2" groupname="regist">-
    <input id="A04" type="text" maxlength="6" tabindex="4" size="6" groupname="regist">
    <input type="button" id="btnSubmit" value="提交">
    <br />
    看似注册码却没有事件:
    <input id="b01" type="text" maxlength="2" tabindex="1" size="2">-
    <input id="b02" type="text" maxlength="4" tabindex="2" size="4">-
    <input id="b03" type="text" maxlength="2" tabindex="3" size="2">-
    <input id="b04" type="text" maxlength="6" tabindex="4" size="6">
    </body>
    <script language="JavaScript">
    <!--
    document.getElementsByInputTypeAndGroupName = function(inputType, groupName)
        {
            var oCollection = document.getElementsByTagName("input");
            var oTypeArray = new Array();
            var oInput;
            for (var i=0; i<oCollection.length; i++)
            {
                oInput = oCollection[i];
                if (oInput.type==inputType && oInput.groupname==groupName)
                {
                    oTypeArray.push(oInput);
                }
            }        return oTypeArray;
        };var txtArray = document.getElementsByInputTypeAndGroupName("text","regist");for (var t=0; t<txtArray.length; t++)
    {
        if (t < txtArray.length-1)
        {
            txtArray[t].nextFocus = txtArray[t+1];        txtArray[t].onkeyup = function()
            {
                if (this.value.length == this.maxLength)
                {
                    this.nextFocus.focus();
                }
            };
        }
    }//-->
    </script>
      

  14.   

    修正一下 html 代码部分的 tabindex
    脚本不改<body>
    注册码:
    <input id="A01" type="text" maxlength="2" tabindex="1" size="2" groupname="regist">-
    <input id="A02" type="text" maxlength="4" tabindex="2" size="4" groupname="regist">-
    <input id="A03" type="text" maxlength="2" tabindex="3" size="2" groupname="regist">-
    <input id="A04" type="text" maxlength="6" tabindex="4" size="6" groupname="regist">
    <input type="button" id="btnSubmit" tabindex="5" value="提交">
    <br />
    看似注册码却没有事件:
    <input id="b01" type="text" maxlength="2" tabindex="6" size="2">-
    <input id="b02" type="text" maxlength="4" tabindex="7" size="4">-
    <input id="b03" type="text" maxlength="2" tabindex="8" size="2">-
    <input id="b04" type="text" maxlength="6" tabindex="9" size="6">
    </body>
      

  15.   

    TO CutBug():
    首先非常非常感谢你的不厌其详地帮助我。当我把form改成
    <FORM name="testForm" METHOD=POST ACTION="">
    <input name="A01_1" type="text" maxlength="2" tabindex="1"  >
    <input name="A02_0" type="text" maxlength="4" tabindex="2" disabled>
    <input name="A02_1" type="text" maxlength="4" tabindex="3">
    <input name="A03_1" type="text" maxlength="2" tabindex="4">
    </FORM>
    发现不行,我就没继续试你的代码了。因为如果象你这样写(当然或者可以用循环设事件),我不如这样:
    $F("A01_1").onkeyup=function(){
       if ($F("A02_0").disable){
           $F("A02_1").focus();
       }else{
           $F("A02_0").focus();
       }
    }
    也是每个控件写,或许思路更清析。
      

  16.   

    看看这种写法满意吗?
    基本功能实现了,可以根据需要自己改变一下<html>
    <head>
    <script language="JavaScript">
    <!--
    function initIpt(){
        var ipts = document.getElementsByTagName("input");
        for(var i=0,j=ipts.length;i<j;i++){
            if(ipts[i].type == "text")
                ipts[i].onkeyup = 
                        function(iptNext){ 
                            return function(){
                               if( (this.value.length == this.getAttribute("maxlength")) && iptNext){
                                    iptNext.focus();
                                }
                            };
                        }(ipts[i+1]);
        }
    }
    //-->
    </script>
    </head>
    <body onload="initIpt()">
        <FORM name="testForm" METHOD=POST ACTION="">
            <input id="A01_1" type="text" maxlength="2" tabindex="1">
            <input id="A02_1" type="text" maxlength="2" tabindex="2">
            <input type="text" maxlength="2" tabindex="3">
            <input name="A03_1" type="text" maxlength="2" tabindex="4">
        </FORM>
    </body>
    </html>
      

  17.   

    最标准得答案
    <html>
    <head>
    <script type="text/javascript">
    function checkLen(x,y)
    {
    if (y.length==x.maxLength)
    {
    var next=x.tabIndex
    if (next<document.getElementById("myForm").length)
    {
    document.getElementById("myForm").elements[next].focus()
    }
    }
    }
    </script>
    </head><body>
    <p>This script automatically jumps to the next field when the current field's maxlength has been reached:</p><form id="myForm">
    <input size="3" tabindex="1" maxlength="3" onkeyup="checkLen(this,this.value)">
    <input size="2" tabindex="2" maxlength="2" onkeyup="checkLen(this,this.value)">
    <input size="3" tabindex="3" maxlength="3" onkeyup="checkLen(this,this.value)">
    </form>
    </body></html>
      

  18.   

    <input type="text" maxlength="3">
    <input type="text" maxlength="4">
    <input type="text" maxlength="5">
    <input type="text" maxlength="7">
    <script language="javascript">
    var text = document.getElementsByTagName("input");
    var j=0;
    for(var i=0;i<text.length;i++){
    if(text[i].type=="text"){
    j=i;
    text[i].index=i;
    text[j].nextIndex=i;
    text[i].onkeyup=function(){
    if(event.keyCode==9)return;if(this.value.length==this.maxLength && event.keyCode!=8 && event.keyCode!=46 && !(event.keyCode>=37 && event.keyCode<=40))
    if(text[this.nextIndex+1])text[this.nextIndex+1].focus();
    }
    }
    }
    </script>
      

  19.   

    最后一贴,前面的写的太复杂,写的简单通用点吧。
    <FORM name="testForm" METHOD=POST ACTION="">
    <input name="A01_1" type="text" maxlength="2" tabindex="1"  >
    <input name="A02_0" type="text" maxlength="4" tabindex="3" disabled>
    <input name="A02_1" type="text" maxlength="4" tabindex="2">
    <input name="A03_1" type="text" maxlength="2" tabindex="4">
    </FORM><script language="javascript">
    <!--
    init();
    /*&sup3;&otilde;&Ecirc;&frac14;&raquo;&macr;&Ecirc;&Acirc;&frac14;&thorn;*/
    function init()
    {
    var len=testForm.length;
    for(var i=0;i<len;i++)
    {
    testForm[i].attachEvent("onkeyup",autoFocus)
    }
    }/*onkeyup&Ecirc;&Acirc;&frac14;&thorn;&ordm;&macr;&Ecirc;&yacute;*/
    function autoFocus()
    {
    var q=1;
    var len=testForm.length;
    var obj=event.srcElement;
    if(obj.value.length==obj.getAttribute("maxlength"))
    {
    for(var j=0;j<len;j++)
    {

    if(testForm[j].getAttribute("tabindex")==obj.getAttribute("tabindex")+q && event.keyCode!=9)
    {
    if(testForm[j].disabled)
    {
    q++;
    continue;
    }
    testForm[j].focus();
    }

    }
    }
    }

    //-->
    </script>
      

  20.   

    EditPlus注释贴出来怎么是乱码,shit!
      

  21.   

    yixianggao() ( ) 信誉:100    Blog  2006-10-20 11:14:00  得分: 0  
     
     
       
    俺也凑个热闹!由于 JavaScript 无法模拟键盘点击事件!—— 谁要是知道能模拟键盘事件的话,一定告诉我!!!参考代码如下,已测试!
    <body>
    注册码:
    <input id="A01" type="text" maxlength="2" tabindex="1" size="2" groupname="regist">-
    <input id="A02" type="text" maxlength="4" tabindex="2" size="4" groupname="regist">-
    <input id="A03" type="text" maxlength="2" tabindex="3" size="2" groupname="regist">-
    <input id="A04" type="text" maxlength="6" tabindex="4" size="6" groupname="regist">
    <input type="button" id="btnSubmit" value="提交">
    <br />
    看似注册码却没有事件:
    <input id="b01" type="text" maxlength="2" tabindex="1" size="2">-
    <input id="b02" type="text" maxlength="4" tabindex="2" size="4">-
    <input id="b03" type="text" maxlength="2" tabindex="3" size="2">-
    <input id="b04" type="text" maxlength="6" tabindex="4" size="6">
    </body>
    <script language="JavaScript">
    <!--
    document.getElementsByInputTypeAndGroupName = function(inputType, groupName)
    //////////////////////////上面这行代码什么意思啊////////////////////////////
    //这段代码的用处是什么呢,谁能给我讲解下吗////////////////////////
        {
            var oCollection = document.getElementsByTagName("input");
            var oTypeArray = new Array();
            var oInput;
            for (var i=0; i<oCollection.length; i++)
            {
                oInput = oCollection[i];
                if (oInput.type==inputType && oInput.groupname==groupName)
                {
                    oTypeArray.push(oInput);
                }
            }        return oTypeArray;
        };
    ///////////////////////到这里为止 感觉上下代码没什么联系啊////////////////
    var txtArray = document.getElementsByInputTypeAndGroupName("text","regist");for (var t=0; t<txtArray.length; t++)
    {
        if (t < txtArray.length-1)
        {
            txtArray[t].nextFocus = txtArray[t+1];        txtArray[t].onkeyup = function()
            {
                if (this.value.length == this.maxLength)
                {
                    this.nextFocus.focus();
                }
            };
        }
    }//-->
    </script>
      
     
      

  22.   

    document.getElementsByInputTypeAndGroupName = function(inputType, groupName)
    //////////////////////////上面这行代码什么意思啊////////////////////////////
      

  23.   

    to:zilu2008(子鹿) 
    子鹿 可教也!哈document.getElementsByInputTypeAndGroupName = function(inputType, groupName)
    意思是:为 本页的 document 对象动态添加一个名为 getElementsByInputTypeAndGroupName 的方法,同时可接受两个参数。
    分别解释一下:
    getElementsByInputTypeAndGroupName 即 根据 input 标记的 type 属性(标准)和 groupname 属性(自定义)获取相应的 元素数组。
    参数 
    inputType —— input 标记的 type 属性(标准);
    groupName —— input 标记的 groupname 属性(自定义)。当然写成独立的 function 完全没问题,之所以赋给 document 对象作为动态添加的方法,完全是个人喜好,更符合面向的对象的思路吧!哈
      

  24.   

    我只能搞定有 name 的, 没 name 的没办法搞.
    <!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">
    <!-- DW6 -->
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>shawl.qiu template</title>
    <style type="text/css">
    /* <![CDATA[ *//* ]]> */
    </style>
    <script type="text/javascript">
    //<![CDATA[
    function fJpTo(o, oForm){
    var temp=document.getElementById(oForm.name).getElementsByTagName('input');
    var temp1='';
    var mLen=o.getAttribute('maxlength');
    for (var i=0; i<temp.length; i++){
    if(o.value.length==mLen){
    if(temp[i].name==o.name){
    temp1=i+1;
    if(temp1<temp.length){
    document.getElementById(temp[temp1].name).focus();
    }
    }
    }
    }

    }
    //]]>
    </script>
    </head>
    <body>
    <FORM name="testForm" METHOD=POST ACTION="">
    <input name="A01_1" type="text" maxlength="2" tabindex="1" onkeyup="fJpTo(this, this.form)">
    <input name="A02_1" type="text" maxlength="2" tabindex="2" onkeyup="fJpTo(this, this.form)">
    <input name="unnamed" type="text" maxlength="2" tabindex="3" onkeyup="fJpTo(this, this.form)">
    <input name="A03_1" type="text" maxlength="2" tabindex="4" onkeyup="fJpTo(this, this.form)">
    </body>
    </html>
      

  25.   

    哦, 看错, tabindex? 貌似只有IE支持, 我试了 Opera 和 firefox 都不支持<!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">
    <!-- DW6 -->
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>shawl.qiu template</title>
    <style type="text/css">
    /* <![CDATA[ *//* ]]> */
    </style>
    <script type="text/javascript">
    //<![CDATA[
    function fJpTo(o, oForm){
    var temp=document.getElementById(oForm.name).getElementsByTagName('input');
    var temp1='';
    var mLen=o.getAttribute('maxlength');
    var tix=o.getAttribute('tabindex');
    for (var i=0; i<temp.length; i++){
    if(o.value.length==mLen){
    temp1=document.getElementById(temp[i].name).getAttribute('tabindex')
    if(temp1==tix+1){
    document.getElementById(temp[i].name).focus()
    }
    }
    }

    }
    //]]>
    </script>
    </head>
    <body>
    <FORM name="testForm" METHOD=POST ACTION="">
    <input name="A01_1" type="text" maxlength="2" tabindex="1" onkeyup="fJpTo(this, this.form)">
    <input name="unnamed" type="text" maxlength="2" tabindex="3" onkeyup="fJpTo(this, this.form)">
    <input name="A03_1" type="text" maxlength="2" tabindex="4" onkeyup="fJpTo(this, this.form)">
    <input name="A02_1" type="text" maxlength="2" tabindex="2" onkeyup="fJpTo(this, this.form)">
    </body>
    </html>
      

  26.   

    TO:myvicy(看着远方,走脚下的路。) 
    你说的是最接近这个要求的,但由于还有其它要求,似乎循环赋方法行不通。唉...TO:btbtd(博学笃志, 切问近思; 神闲气静, 智深勇沉.-围炉夜话) 
    现在一般在IE上运行,如果IE都过不了,就谈不上FF和其它了。你的代码连上面说的中间有disabled都没处理。================================================================================
    TO:大家
    现时情况是这样的
    1.自动跳转是“专业”录入员要求的做法,他们连回车都不想按了。2.由于有填写规则的影响,会根据其中一些填写值来改变其它录入框的disabled状态,所以循环势必会引出特殊的判断。当然不排除可行的方案,但在我们开发人员角度看,是否循环就比直接每个写事件会简单通用呢,如果不是那循环的逻辑不是增加了复杂性了吗?3.本人认为不应从循环赋通用方法这个方向上想解决方法,应从模拟TAB按键(比如fireEvent)上想可能好些。4.现在不是要差不多的代码,因为我自已这两天已试过N个,是要完成解决的方案,最起码:
    1)不影响原来的tab使用
    2)不会因规则导致的未知个数的disable而影响
    的基础上实现上面的功能。
    ===========================================================================继续等行传说的高手......
      

  27.   

    哇看上去好困難的問題啊。。對js不是很懂啊。路過,幫你頂 meizz進來