想做到这么一种效果
在一行div里面输入数据,最后一列按回车后保存,新建一行,焦点移到新的一行的第一格。
自己做了一下,发现insertRows后,不能读取新建的行...焦点没有动过...说明它还在上一行的最后一列,
即使event.keyCode=9,但由于没有下一个可用焦点...没有动...还停留在原来哪一格...下面是第一行的代码
<td align='center' height='35px'></td>
<td align='center'>
<div contentEditable='true' onkeydown='if(event.keyCode==13)event.keyCode=9' id='div1"+row+"'></div>
</td>
<td align='center'>
<div contentEditable='true' onkeydown='if(event.keyCode==13)addNewMsg()' onKeyPress='if (event.keyCode!=46 && (event.keyCode<48 || event.keyCode>57)) event.returnValue=false' style='ime-mode:disabled' id='div2"+row+"'>
</div></td>点击回车事件//学分分值框的判断
function addNewMsg(){
    var table=document.getElementById("XFLYMC");
    var row=table.rows.length;
     
    if(document.getElementById("div1"+row).innerHTML==""){
        alert("学分类别名称不能为空!");
        event.returnValue=false;   
        document.getElementById("div1"+row).focus();
    }
    else if(document.getElementById("div2"+row).innerHTML==""){
        alert("学分分值不能为空!");
        event.returnValue=false;   
        document.getElementById("div2"+row).focus();
    }else{
        addXFMC();  
        event.keyCode=9;
    }
}
//添加学分类别名称
function addXFMC(){
    var table=document.getElementById("XFLYMC");
    var row=table.rows.length;
    document.getElementById("ShowId").value="3";
    var XMLBdm = document.getElementById("XMLB").value;
    var XFLYLB = document.getElementById("XFLYLB").options[document.getElementById("XFLYLB").selectedIndex].text;
    var XFLYMC = document.getElementById("div1"+row).innerHTML;
    var XFFZ = document.getElementById("div2"+row).innerHTML;
    createRequest("xueFenLaiYuanGuanLi.do?method=addXFLYmc&XFLYLB="+XFLYLB+"&XMLBdm="+XMLBdm+"&XFLYMC="+XFLYMC+"&XFFZ="+XFFZ); 
}
//添加新的一行
function insertRows(){
    var obj = document.getElementById("XFLYMC");//获取table对象        var size = obj.rows.length;
        
        var oRow= obj.insertRow(size); 
        //alert(oRow);
        oRow.align="center";  
        oRow.height=35;    
        
        for(var i=0;i<3;i=i+1){
             obj.rows[size].insertCell(i);
        }
    
        var row = Number(size+1);
        
        obj.rows[size-1].cells[0].innerHTML="<div>作废</div>";
        obj.rows[size].cells[1].innerHTML="<div><div contentEditable='true' onkeydown='if(event.keyCode==13)event.keyCode=9' id='div1"+row+"'></div></div>";
        obj.rows[size].cells[2].innerHTML="<div contentEditable='true' onkeydown='if(event.keyCode==13)addNewMsg()'"+
                             "onKeyPress='if (event.keyCode!=46 && (event.keyCode<48 || event.keyCode>57)) event.returnValue=false' style='ime-mode:disabled' id='div2"+row+"'>"+
                             "</div>";
 }
大概就是这样子了...帮忙看看谢谢

解决方案 »

  1.   

    为什么变成9就能走到下一行?没看到你的代码对keyCode=9的情况有什么特殊处理啊。
      

  2.   


    keycode 9 = Tab Tab 这是换行吗?
      

  3.   


    他的意思大概是恩keyCode 9 转换为tab 然后咱们默认tab的功能不是将焦点移到下一个栏上木。。由于LZ后来的表单是动态生成的 LZ只是想把该条记录添加完恩TAB键默认到下一个表单(后生成的)里去吧不一定非得这样 监听keyCode 键是必要的 不过移动焦点不用非得用tab 你可以通过JS获得这个页面所有的这个元素的数组 再获得当前焦点所处的这个数组的位置 然后把该焦点用JS移动到该位置 + 1的地方不就好了木?
      

  4.   

    ls这个主意貌似有用的样子...很好...
    如果我要获得所有这个元素的数组的的话,我应该根据什么来获取呢?是不是每个元素的id都设成一样呢?
      

  5.   


    通常我个人建议用 class 
      

  6.   

    class??可以获得class的值??how~~~
      

  7.   

    刚找了个...是eventElement.name么??
      

  8.   


    根据getElementsByName也行 可是我让你用class不是说有根据class获得元素集合的方法啊。。加判断不中么?
      

  9.   

    你没明白我啥意思执行这种回车然后换一个元素的东西不是得分部分嘛。。 你把表单元素都加个CLASS 回头只换该CLASS的的焦点 明白木有啊。。? 另外 我说的是方法 方法是我说的 自然有缺陷 还有很多要考虑的事情的。。 比如要考虑到该点是该数组最后一个焦点+1的时候你要确认你 +1这个位置是符合你的要求的 如果不符合应该再+1 直到focus到符合条件的元素上
      

  10.   

    问题是我现在不是这个问题啊.....
    看看这个 //在添加一行前显示table的总行数
     var table=document.getElementById("XFLYMC");
     var row=table.rows.length;      
     alert(row);
            
     addXFMC(); //执行添加一行的方法
            
     //在添加一行后显示table的总行数
     var table=document.getElementById("XFLYMC");
     var row=table.rows.length;
     alert(row);//添加一行的方法
    function addXFMC(){
        var table=document.getElementById("XFLYMC");
        var row=table.rows.length;
        document.getElementById("ShowId").value="3";
        var XMLBdm = document.getElementById("XMLB").value;
        var XFLYLB = document.getElementById("XFLYLB").options[document.getElementById("XFLYLB").selectedIndex].text;
        var XFLYMC = document.getElementById("div1"+row).innerHTML;
        var XFFZ = document.getElementById("div2"+row).innerHTML;
        createRequest("xueFenLaiYuanGuanLi.do?method=addXFLYmc&XFLYLB="+XFLYLB+"&XMLBdm="+XMLBdm+"&XFLYMC="+XFLYMC+"&XFFZ="+XFFZ); 
    }//插入一行
    function insertRows(){
        var obj = document.getElementById("XFLYMC");//获取table对象        var size = obj.rows.length;
            
            var oRow= obj.insertRow(size); 
            //alert(oRow);
            oRow.align="center";  
            oRow.height=35;    
            
            for(var i=0;i<3;i=i+1){
                 obj.rows[size].insertCell(i);
            }
        
            var row = Number(size+1);
            
            obj.rows[size-1].cells[0].innerHTML="<div>作废</div>";
            obj.rows[size].cells[1].innerHTML="<div><div contentEditable='true' onkeydown='if(event.keyCode==13)event.keyCode=9' id='div1"+row+"' class='div'></div></div>";
            obj.rows[size].cells[2].innerHTML="<div contentEditable='true' onkeydown='if(event.keyCode==13)addNewMsg()'"+
                                 "onKeyPress='if (event.keyCode!=46 && (event.keyCode<48 || event.keyCode>57)) event.returnValue=false' style='ime-mode:disabled' id='div2"+row+"' class='div'>"+
                                 "</div>";
     }
    问题是它两次打印行数都是一样的.....但是它又的确又添加到新的一行.....彻底无语了....
      

  11.   

    就是弹窗口嘛....一般都将它和print归结为一类了....