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. Ubuntu安装开发版pidgin支持lwqq插件

    sudo add-apt-repository ppa:lainme/pidgin-lwqq  """添加pidgin-lwqq源""" s ...

  2. Windows系统版本判定那些事儿[转]

    Windows系统版本判定那些事儿 转自CSDN,原文链接,我比较不要脸, 全部给复制过来了 前言 本文并不是讨论Windows操作系统的版本来历和特点,也不是讨论为什么没有Win9,而是从程序员角度 ...

  3. mvc - view传值到js

    http://www.cnblogs.com/akwwl/p/5238975.html

  4. 团队内的沟通方式:网络 OR 当面

    4月1日,我和老王稍微聊了聊关于互联网的工作方式,团队的成员不在一个地方,通过远程互联网的方式进行沟通是不是OK.现在确实有很多公司是有多地的分公司,子公司,不同的团队在不同的办公室中,甚至一个大团队 ...

  5. js Array操作

    JS中数组的操作 1.数组的创建 var arrayObj = new Array(); //创建一个数组 var arrayObj = new Array([size]); //创建一个数组并指定长 ...

  6. C# 多态(2)

    接上面讲 我们知道虚方法,和重写方法. 但是有没有发现 override和new的作用是差不多的. 但为什么还要单独写出来两个呢? 首先,咱们要明白一个问题,继承是具有线性传播的. class Fat ...

  7. MongoDB 副本集配置,开启账号认证

    MongoDB 自带功能强大的主从,配置也很简单,从零开始花了30分钟搞定 3台以上机器IP: 192.168.1.24, 192.168.1.25, 192.168.1.26, 192.168.1. ...

  8. 设置使用的python版本

    一.查看当前使用的python版本,或设置使用的python版本 二.python2中默认使用ASCII码,无法识别中文,报错如图,解决办法,设置字符集为utf-8

  9. Jmeter_录制HTTPS

    [环境] Jmeter版本:Jmeter3.2: JDK版本:JDK1.8 [配置] [1]添加“线程组.Http信息头管理器.httpCookie管理器.HTTP代理服务器”: [2]设置浏览器的“ ...

  10. 【bzoj3930】选数 容斥原理+暴力

    Description 我们知道,从区间[L,H](L和H为整数)中选取N个整数,总共有(H-L+1)^N种方案.小z很好奇这样选出的数的最大公约数的规律,他决定对每种方案选出的N个整数都求一次最大公 ...