Gridview如何实现敲回车进入下一行,或者用方向键在不同的行之间切换?

来源:互联网 发布:工信部网络安全局 编辑:程序博客网 时间:2024/04/28 13:42

/*
///本函数是在keypressed2上扩展得来.对keypressed2进行优化及按目前需求增加相应功能
///ZLJ 2007-11-05-22:00
/// 在datagrid里,跟据所按下的方向键,对当前光标位置做相对应的跳转
///缺陷:目前只能对Datagrid中的textbox模板列进行控制.

若为最后一列时,则光标转向下一行的第一列,若为最后一行的最后一列则按向右光标键不做反应。
若为第一列时,按向左则光标转向上一行的最后一列。
若为最后一行时,按向下光标则新增一行
若为第一行时,按向上光标则不做反应。
若下一个目的地只是单纯的表格,没有子控件(textbox),则继续寻找下一个单元格,直到找到适合的单元格为止
*/

 function keyPressed(TB)
 {
     var tblGrid = document.getElementById("DataGrid1");
     var TBID = document.getElementById(TB);//当前ID
     var CurCellID=TBID.parentElement;//当前TD
     var CurCellIndex=CurCellID.cellIndex;//当前是第几列
     var CurRowIndex= CurCellID.parentElement.rowIndex;//当前是第行;
     var rowcount = tblGrid.rows.length; //总行
     var CellCount =tblGrid.rows[CurRowIndex].cells.length;//当前行的总列数
     var TargateRow=-1 ;//目标行(默认值为-1)
     var TargateCell=-1 ;//目标列 (默认值为-1)
     var R,C;
 
    if (event.keyCode == 37 || event.keyCode == 38 || event.keyCode == 39 || event.keyCode == 40|| event.keyCode == 13)
    {
        if (tblGrid.rows[CurRowIndex].cells[CurCellIndex].children[0] != null)
        {
            if (tblGrid.rows[CurRowIndex].cells[CurCellIndex].children[0].id == TBID.id)
            {

                 //向下光标****************************************************************************
                 if (event.keyCode == 40 )//Buttom
                {
                    if (CurRowIndex <rowcount-1)
                    {
                        if (tblGrid.rows[CurRowIndex + 1].cells[ CurCellIndex].children[0] != null)
                        {
                            if (tblGrid.rows[CurRowIndex + 1].cells[ CurCellIndex].children[0].type == 'text')
                            {
                                 //downvalue
                                 tblGrid.rows[CurRowIndex + 1].cells[CurCellIndex].children[0].focus();
                                 return false;
                            }
                        }
                    }
                    else
                    {
                        //当在最后一行按向下光标键时,新增一行空白行
                    }
                }
                //END****************************************************************************

                //向上光标(当前行必须大于第一行)******************************************************
                if (event.keyCode == 38 && CurRowIndex > 1 )//up
                {
                    if (tblGrid.rows[CurRowIndex - 1].cells[CurCellIndex].children[0] != null)
                    {
                        if (tblGrid.rows[CurRowIndex - 1].cells[CurCellIndex].children[0].type == 'text')
                        {
                            //upvalue
                            tblGrid.rows[CurRowIndex - 1].cells[CurCellIndex].children[0].focus();
                            return false;
                        }
                    }
                }
                //END****************************************************************************

                //向左光标(当前列为第0列时则转向上一行的最后一列)*******************************
                if (event.keyCode == 37 )//left
                {
                    Outer:
                    for (R=CurRowIndex; R > 0 ;R--)
                    {
                        for (C=CurCellIndex-1;C> =0;C-- )
                        {
                            if (tblGrid.rows[R].cells[C].children[0] != null && tblGrid.rows[R].cells[C].children[0].type == 'text')
                            {
                                TargateRow=R;
                                TargateCell=C;
                                break Outer;
                            }
                        }
                        CurCellIndex = CellCount;//当本行中当前列之前的列中没有找到所需的单元格,则下上行从最后一列处开始
                    }
                    if (TargateRow == -1 ¦ ¦ TargateCell == -1)
                    {
                        return false;
                    }


                    if (tblGrid.rows[TargateRow].cells[TargateCell].children[0].value != '')
                    {
                        var cPos = getCaretPos(tblGrid.rows[TargateRow].cells[TargateCell].children[0],'left');
                        if (cPos)
                        {
                            tblGrid.rows[TargateRow].cells[TargateCell].children[0].focus();
                            return false;
                        }
                        else
                        {
                            return false;
                        }
                    }
                   
                    tblGrid.rows[TargateRow].cells[TargateCell].children[0].focus();
                    return false;

                }
                //END****************************************************************************

                //向右光标(当前列为最后一列时,则转向下一行的第一列)******************************

                if ((event.keyCode == 39 ¦ ¦ event.keyCode == 13 )) //right(按回车也向右移,回车等同于向右光标键)
                {
                    Outer:
                    for (R=CurRowIndex; R < rowcount ;R++)
                    {
                        for (C=CurCellIndex+1;C <CellCount;C++ )
                        {
                            if (tblGrid.rows[R].cells[C].children[0] != null && tblGrid.rows[R].cells[C].children[0].type == 'text')
                            {
                                TargateRow=R;
                                TargateCell=C;
                                break Outer;
                            }
                        }
                        CurCellIndex=-1;//当本行中当前列之后的列中没有找到所需的单元格,则下一行从第0列处开始
                    }
                    if (TargateRow == -1 ¦ ¦ TargateCell == -1)
                    {
                        return false;
                    }

                    if (tblGrid.rows[TargateRow].cells[TargateCell].children[0].value != '')
                    {
                        var cPosR =getCaretPos(tblGrid.rows[TargateRow].cells[TargateCell].children[0],'right');
                        if (cPosR)
                        {
                            tblGrid.rows[TargateRow].cells[TargateCell].children[0].focus();
                            return false;
                        }
                        else
                        {
                            return false;
                        }
                    }
                    tblGrid.rows[TargateRow].cells[TargateCell].children[0].focus();
                    return false;
                }

                //END****************************************************************************
            }
        }
    }
}


原创粉丝点击