-
支持动态combobox选择(搜索条件)
-
支持键盘TAB(shift+TAB)键切换单元格
-
修改一点点代码就可以使用
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>dataGrid键盘监听</title>
<link rel="stylesheet" type="text/css" href="easyui.css">
<link rel="stylesheet" type="text/css" href="icon.css">
<link rel="stylesheet" type="text/css" href="demo.css">
<script type="text/javascript" src="jquery.min.js"></script>
<script type="text/javascript" src="jquery.easyui.min.js"></script>
</head>
<body>
<h2>订单</h2>
<div style="margin:20px 0;"></div>
<div id="tb" style="height:auto">
<a href="javascript:void(0)" class="easyui-linkbutton" data-options="iconCls:'icon-add',plain:true"
onclick="append()">新增行</a>
<a href="javascript:void(0)" class="easyui-linkbutton" data-options="iconCls:'icon-remove',plain:true"
onclick="removeit()">删除行</a>
<a href="javascript:void(0)" class="easyui-linkbutton" data-options="iconCls:'icon-save',plain:true"
onclick="accept()">保存</a>
<a href="javascript:void(0)" class="easyui-linkbutton" data-options="iconCls:'icon-undo',plain:true"
onclick="reject()">撤销</a>
</div>
<table id="dg" class="easyui-datagrid" title="Row Editing in DataGrid" style="width:1200px;height:auto"
data-options="
title: '新增订单',
iconCls: 'icon-edit',
singleSelect: true,
toolbar: '#tb',
data: [
{shopId:'',productAlias:'',shopName:'',OrderNum:'',OrderUnit:'',number:'',price:'',Unit:'',pushprice:'',remake:'' },
{shopId:'',productAlias:'',shopName:'',OrderNum:'',OrderUnit:'',number:'',price:'',Unit:'',pushprice:'',remake:'' },
{shopId:'',productAlias:'',shopName:'',OrderNum:'',OrderUnit:'',number:'',price:'',Unit:'',pushprice:'',remake:'' },
{shopId:'',productAlias:'',shopName:'',OrderNum:'',OrderUnit:'',number:'',price:'',Unit:'',pushprice:'',remake:'' },
{shopId:'',productAlias:'',shopName:'',OrderNum:'',OrderUnit:'',number:'',price:'',Unit:'',pushprice:'',remake:'' },
{shopId:'',productAlias:'',shopName:'',OrderNum:'',OrderUnit:'',number:'',price:'',Unit:'',pushprice:'',remake:'' }
],
onClickCell: onClickCell
">
<thead>
<tr>
<th data-options="field:'productAlias',width:200,align:'center',editor:{
type:'combobox',
options:{
valueField:'shopId',
textField:'productAlias',
loader : nickname,
mode : 'remote',
onSelect: selNickName,
required:true
}}">下单名称</th>
<th data-options="field:'shopName',width:200,align:'center',editor:{
type:'combobox',
options:{
valueField: 'shopId',
textField: 'shopName',
loader : shopname,
mode : 'remote',
required:true
}}">标准名称</th>
<th data-options="field:'OrderNum',width:80,align:'center',editor:{type:'numberbox',options:{precision:2}}">下单数量</th>
<th data-options="field:'OrderUnit',width:80,align:'center',editor:'textbox'">下单单位</th>
<th data-options="field:'number',width:80,align:'center',editor:{type:'numberbox',options:{precision:2}}">销售数量</th>
<th data-options="field:'price',width:80,align:'center',editor:{type:'numberbox',options:{precision:2}}">销售单价</th>
<th data-options="field:'Unit',width:80,align:'center',editor:'textbox'">销售单位</th>
<th data-options="field:'pushprice',width:80,align:'center',editor:{type:'numberbox',options:{precision:2}}">采购价格</th>
<th data-options="field:'remake',width:200,align:'center',editor:'textbox'">备注</th>
</tr>
</thead>
</table>
<script type="text/javascript">
var pfields = undefined; //属性集合
var pgrid = undefined;
$.extend($.fn.datagrid.methods, {
editCell: function(jq, param) {
return jq.each(function() {
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;
if (col.editor == "textbox") { //获取焦点
$(".textbox-text").focus();
$(".textbox-text").select();
}
}
});
}
});
var editIndex = undefined;
var pfield = "";
function endEditing() {
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) {
if (endEditing()) {
$(this).datagrid('selectRow', index).datagrid('editCell', {
index: index,
field: field
});
editIndex = index;
pfield = field;
}
pgrid = $(this);
}
//新增一行
function append(){
if (endEditing()){
$('#dg').datagrid('appendRow',{productAlias:""});
editIndex = $('#dg').datagrid('getRows').length-1;
}
}
//保存
function accept(){
if (endEditing()){
$('#dg').datagrid('acceptChanges');
}
var rows = $("#dg").datagrid("getRows");
for(var i=0;i<rows.length;i++){
if(rows[i].shopName=="" || rows[i].shopName==null){
return;
}else{
console.log("保存的数据",rows)
}
}
}
//需要定义 grid editIndex pfield pfields
$(document).keydown(function(event) {
//判断单元格编辑状态
if (event.keyCode == 9 && (!event.shiftKey) /*||event.keyCode ==39*/ ) { //tab 和 向右方向键
var e = event
if (e.preventDefault) { //屏蔽浏览器快捷键
e.preventDefault();
e.stopPropagation()
} else {
e.returnValue = false;
e.cancelBubble = true
}
pgrid.datagrid('endEdit', editIndex); //结束编辑
pgrid.datagrid('cancelEdit', editIndex); //取消编辑
pgrid.datagrid('refreshRow', 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;
}
}
if (editIndex == pgrid.datagrid('getData').rows.length) { //当到最后一行时 换列
append(); //新增一行
/* 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});", 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); //结束编辑
pgrid.datagrid('cancelEdit', editIndex); //取消编辑
pgrid.datagrid('refreshRow', 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)
}
});
//end
/**下单名称**/
var nickname = function (param, success, error) {
var q = param.q || "";
//console.log(param.q)
if (q.length <= 0) {
//console.log("q.length <= 0");
return false;
}
$.ajax({
url: "http://wechat.superms.cn/AreasComputer/BasicInformation/AliasSearch",
type: "get",
data: {buyerOrgId:'ON201905200011',search: q},//后台使用param这个变量接收传值的
dataType: "json",
success: function (res) {
if(res.Code==200){
console.log('数据',res); //返回的是数组对象data
success(res.Result);//调用loader的success方法,将items添加到下拉框中,这里是难点啊,之前后台已经返回数据了,但就是不添加到下拉框
}else{
success(res.Result)
}
}
});
}
/**标准名称**/
var shopname = function (param, success, error) {
var q = param.q || "";
//console.log(param.q)
if (q.length <= 0) {
//console.log("q.length <= 0");
return false;
}
$.ajax({
url: "http://wechat.superms.cn/AreasComputer/BasicInformation/SearchShop",
type: "get",
data: {buyerOrgId:'ON201905200011',search: q},//后台使用param这个变量接收传值的
dataType: "json",
success: function (res) {
if(res.Code==200){
console.log('数据',res); //返回的是数组对象data
success(res.Result);//调用loader的success方法,将items添加到下拉框中,这里是难点啊,之前后台已经返回数据了,但就是不添加到下拉框
}else{
success(res.Result)
}
}
});
}
/**选中下单名称**/
var selNickName = function (param){
$(this).textbox('textbox').keydown(function (event) {
if (event.keyCode == 13) { //监听回车(选择以后在更新行数据)
console.log("param",param);
pgrid.datagrid('endEdit', editIndex);
$('#dg').datagrid('updateRow',{
index: editIndex,
row: {
shopId:param.shopId,
productAlias:param.productAlias,
shopName:param.shopName,
OrderNum:param.OrderNum,
OrderUnit:param.OrderUnit,
number:param.number,
price:param.price,
Unit:param.Unit,
pushprice:param.pushprice,
remake:param.remake
}
});
}
});
}
/**选中标准名称**/
var selShopName = function (param){
console.log("param",param);
pgrid.datagrid('endEdit', editIndex);
$('#dg').datagrid('updateRow',{
index: editIndex,
row: {
shopId:param.shopId,
shopName:param.shopName,
OrderNum:param.OrderNum,
OrderUnit:param.OrderUnit,
number:param.number,
price:param.price,
Unit:param.Unit,
pushprice:param.pushprice,
remake:param.remake
}
});
}
</script>
</body>
</html>
这个表的操作,困了我一个星期,为了不让更多的人卡在这个问题上,所以我分享出来了。