1.表格定义时加上 onClickCell: onClickCell,
2.定义列时加入编辑器
3.引入 key.js 即可使用

enter 键 或者向下箭头 选中单元格下移 选中单元格上移
tab键 选中单元格右移 shirft+tab 选中单元格左移

最后一行另起一格

欢迎改进

var pfields =undefined; //属性集合
var pgrid = undefined ;
$.extend($.fn.datagrid.methods, {
editCell: function(jq,param){
return jq.each(function(){
debugger;
var opts = $(this).datagrid('options');
var fields = $(this).datagrid('getColumnFields',true).concat($(this).datagrid('getColumnFields'));
var arr =new Array();
for(var i=0; i<fields.length; i++){
var col = $(this).datagrid('getColumnOption', fields[i]);
if(col.editor!=undefined){
arr.push(fields[i]);
}
col.editor1 = col.editor;
if (fields[i] != param.field){
col.editor = null;
}
}
pfields=arr;
$(this).datagrid('beginEdit', param.index);
var ed = $(this).datagrid('getEditor', param);
if (ed){
if ($(ed.target).hasClass('textbox-f')){
$(ed.target).textbox('textbox').focus();
} else {
$(ed.target).focus();
}
}
for(var i=0; i<fields.length; i++){
var col = $(this).datagrid('getColumnOption', fields[i]);
col.editor = col.editor1;
}
});
}
});
var editIndex = undefined;
var pfield ="";
function endEditing(){
debugger;
if (editIndex == undefined){return true}
if (pgrid.datagrid('validateRow', editIndex)){
pgrid.datagrid('endEdit', editIndex);
editIndex = undefined;
return true;
} else {
return false;
}
}
function onClickCell(index, field){
debugger;
if (endEditing()){
$(this).datagrid('selectRow', index)
.datagrid('editCell', {index:index,field:field});
editIndex = index;
pfield = field;
}
pgrid = $(this);
}
//需要定义 grid editIndex pfield pfields

$(document).keydown(function(event){
debugger;
//判断单元格编辑状态
if(event.keyCode == 13||event.keyCode == 40){ //enter 和向下方向键
pgrid.datagrid('endEdit', editIndex);
editIndex=editIndex+1;
if(editIndex==pgrid.datagrid('getData').rows.length){ //当到最后一行时 换列
editIndex=0;
for(var j=0; j<pfields.length; j++){
if(pfield==pfields[j]){
if(j==pfields.length-1){
pfield=pfields[0];
break;
}
pfield=pfields[j+1];
break;
}
}
}
setTimeout("pgrid.datagrid('selectRow', editIndex).datagrid('editCell', {index:editIndex,field:pfield});",50)//防止快捷键冲突设置延迟,机智如我
}else if(event.keyCode == 38){ //向上方向键
var e=event
pgrid.datagrid('endEdit', editIndex);
editIndex=editIndex-1;
if(editIndex==-1){ //最前一行时换列
editIndex=pgrid.datagrid('getData').rows.length-1;
for(var j=0; j<pfields.length; j++){
if(pfield==pfields[j]){
if(j==0){
pfield=pfields[pfields.length-1];
break;
}
pfield=pfields[j-1];
break;
}
}
}
setTimeout("pgrid.datagrid('selectRow', editIndex).datagrid('editCell', {index:editIndex,field:pfield});",50)

}else if (event.keyCode == 9&&(!event.shiftKey)/*||event.keyCode ==39*/){ //tab 和 向右方向键
debugger;
var e=event
if(e.preventDefault){ //屏蔽浏览器快捷键
e.preventDefault();
e.stopPropagation()
}else{
e.returnValue=false;
e.cancelBubble=true
}
pgrid.datagrid('endEdit', editIndex);
for(var j=0; j<pfields.length; j++){
if(pfield==pfields[j]){
if(j==pfields.length-1){//最后一列时换行
editIndex=editIndex+1;
pfield=pfields[0];
break;
}
pfield=pfields[j+1];
break;
}
}
setTimeout("pgrid.datagrid('selectRow', editIndex).datagrid('editCell', {index:editIndex,field:pfield});",100)

}else if(event.keyCode == 9&&event.shiftKey){ //shift tab 向左移动
var e=event
if(e.preventDefault){
e.preventDefault();
e.stopPropagation()
}else{
e.returnValue=false;
e.cancelBubble=true
}
pgrid.datagrid('endEdit', editIndex);
for(var j=0; j<pfields.length; j++){
if(pfield==pfields[j]){ //最前一列时换行
if(j==0){
editIndex=editIndex-1;
pfield=pfields[pfields.length-1];
break;
}
pfield=pfields[j-1];
break;
}
}
setTimeout("pgrid.datagrid('selectRow', editIndex).datagrid('editCell', {index:editIndex,field:pfield});",100)
}
});

easyUI--datagrid 实现按键控制( enter tab 方向键 )的更多相关文章

  1. easyui datagrid 键盘上下控制选中行

    扩展datagrid的一个方法keyCtr $.extend($.fn.datagrid.methods, { keyCtr : function (jq) {  return jq.each(fun ...

  2. 控制EasyUI DataGrid高度

    这次要说的是控制EasyUI的高度,平时我公司的项目,用EasyUI较多,然后datagrid这个组件是用的非常多的.平时我们都是固定高度,常见代码如下:             <table  ...

  3. js控制easyui datagrid列的显示和隐藏

    easyui datagrid 列隐藏和显示 $('#grid').datagrid('hideColumn','列field'); //把hideColumn换成showColumn 即为显示列

  4. easyui datagrid复选框控制单选

    使用easyui datagrid的时候,由于对数据表格操作太多,并且有单选和多选功能因此采用复选框.但是在单选的状态,使用CheckOnSelect和singleselect时发现,页面有明显延迟, ...

  5. easyui datagrid 没数据时显示滚动条的解决方法

    今天解决了一个bug,因为datagrid有多列,可是当没有数据的时候,后面的列无法通过滚动条拉动来显示,比较麻烦,而需求要求没有数据也要拉动滚动条查看后面有什么列,一开始在网上找了一些资料,发现都不 ...

  6. easyui datagrid 分页略解

    easyui datagrid 本身自带了分页功能. 但是这个需要你自己控制. 在后台可以得到两个datagrid的参数,rows 和page.其中rows是每页要显示的个数,page是第几页.单纯的 ...

  7. easyui datagrid 列隐藏和显示

    easyui datagrid 列隐藏和显示 用js怎么控制列的显示和隐藏?   最佳答案   $('#grid').datagrid('hideColumn','列field');把hideColu ...

  8. 使用canvas绘制渐变色矩形和使用按键控制人物移动

    使用canvas绘制渐变色矩形和使用按键控制人物移动 1.使用canvas绘制渐变色矩形 效果演示 相关代码: <!DOCTYPE html> <html lang="en ...

  9. EasyUi DataGrid 请求Url两次问题

    easyui datagrid 1.4 当total为0时,请求两次url问题 框架问题:需要在easyui文件后加修补补丁 /** * The Patch for jQuery EasyUI 1.4 ...

随机推荐

  1. 什么是Condition Number(条件数)?

    In the field of numerical analysis, the condition number of a function with respect to an argument m ...

  2. Sublime Text 2插件推荐

    必装Package Control 使用Ctrl+`快捷键或者通过View->Show Console菜单打开命令行,粘贴如下代码: import urllib2,os; pf='Package ...

  3. fputs()

    原型:int fputs(const char *str, FILE *stream) 参数解释: const char *str : const限制函数内部修改指针指向的数据(在函数形参使用cons ...

  4. kafka启动报错Cannot allocate memory;There is insufficient memory for the Java Runtime Environment to continue.

    kafka启动过程报错,配置没有问题,这就懵了!! Java HotSpot(TM) 64-Bit Server VM warning: INFO: os::commit_memory(0x00000 ...

  5. EF进阶篇(二)——CRUD

    前言 不写前言了... 内容 我们都知道我们修改的实体状态添加到上下文里面,然后上下文根据实体状态生成相应的SQL执行脚本,去隐式执行到数据库中.(屏幕前的你暂且这样理解吧,因为小编语文没有学好,太通 ...

  6. php代码审计3审计sql注入漏洞

    SQL注入攻击(sql injection)被广泛用于非法获取网站控制权,在设计程序时,忽略或过度任性用户的输入,从而使数据库受到攻击,可能导致数据被窃取,更改,删除以及导致服务器被嵌入后门程序等 s ...

  7. 有关git的使用,和git的一些提交冲突。

    git 的一些基本用法 git init :初始化文件(创建文件夹). git add . :监控工作区的状态树(将被修改的文件提交到暂存区) git status :未跟踪状态(Untracked) ...

  8. 老男孩Day11作业:selectors版socket

    一.作业需求: 使用SELECT或SELECTORS模块实现并发简单版FTP 允许多用户并发上传下载文件 二.readme 一.作业需求: 使用SELECT或SELECTORS模块实现并发简单版FTP ...

  9. 并查集简述 (HDU-1213-How Many Tables)

    并查集主要解决集合的有关运算,主要操作是查找操作和并操作. 1.集合的储存方式. 为便于查找,集合通常以树结构储存,每个元素分 数据域和指针域,可以用链式储存,也可以用结构数组储存,用根节点来表示一个 ...

  10. Centos7.4 更换国内yum源

    1.进入yum源配置文件夹.(配置之前先看看有没有安装wget命令呢,没的话可以先用当前的yum源安装一下再说.yum -y install wget) 2.转到配置文件目录  cd /etc/yum ...