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. (转)Asp.net页面生命周期详解任我行(1)-小试牛刀,编写页面代码

    原文地址:http://www.cnblogs.com/xuyubing/archive/2013/10/01/3348344.html 前言 很久很久以前,还是我在学校的时候,我就看了传智里面视频, ...

  2. (转)菜鸟去重复之Sql

    原文地址:http://www.cnblogs.com/fatbird/p/Sql-Remove-duplicate.html 前言 本文主要是总结平时工作学习中遇到的使用Sql Server的去除重 ...

  3. 编写高质量代码改善C#程序的157个建议——建议7: 将0值作为枚举的默认值

    建议7: 将0值作为枚举的默认值 允许使用的枚举类型有byte.sbyte.short.ushort.int.uint.long和ulong.应该始终将0值作为枚举类型的默认值.不过,这样做不是因为允 ...

  4. 阿里云RDS外网无法访问解决办法

    为了安全起见,阿里云的RDS数据库设置只能内网连接,那么为了方便查询数据,我每次都去连接内网服务器远程桌面. 这次我因为网络问题,远程桌面非常不稳定,一会掉线一会掉线,只能另想办法. 同事那里有个批处 ...

  5. C# 微信openid 用户信息

    前段demo index.html <!DOCTYPE html> <html> <head> <meta charset="utf-8" ...

  6. 编码原则实例------c++程序设计原理与实践(进阶篇)

    编码原则: 一般原则 预处理原则 命名和布局原则 类原则 函数和表达式原则 硬实时原则 关键系统原则 (硬实时原则.关键系统原则仅用于硬实时和关键系统程序设计) (严格原则都用一个大写字母R及其编号标 ...

  7. Glib之GObject宏介绍

    G_DEFINE_TYPE定义一个静态类型 /** * G_DEFINE_TYPE(`G_DEFINE_TYPE_WITH_CODE`比`G_DEFINE_TYPE`就是多了一个自定义代码参数_C_) ...

  8. 墨菲定律与 IndexOutOfBoundsException(数组越界异常)

    今天维护又反馈了一问题过来,查询试卷时报数组越界异常: 2017-02-28 10:45:24,827[ERROR] HttpException[10.32.111.7:60446:2D07867BE ...

  9. 【noip2017】【Luogu3960】列队 线段树

    题目描述 Sylvia 是一个热爱学习的女♂孩子. 前段时间,Sylvia 参加了学校的军训.众所周知,军训的时候需要站方阵. Sylvia 所在的方阵中有 n \times mn×m 名学生,方阵的 ...

  10. Spark操作—aggregate、aggregateByKey详解

    https://blog.csdn.net/u013514928/article/details/56680825 1. aggregate函数 将每个分区里面的元素进行聚合,然后用combine函数 ...