Jquery 保存/提交时重新加载jqGrid
我有以下代码可以在双击时输入内联编辑:Jquery 保存/提交时重新加载jqGrid,jquery,jqgrid,Jquery,Jqgrid,我有以下代码可以在双击时输入内联编辑: ondblClickRow: function (row_id) { if(row_id != null) { $('#Products').jqGrid('restoreRow',last_selected_row); $('#Products').jqGrid('saveRow',row_id); $("#Pr
ondblClickRow: function (row_id) {
if(row_id != null) {
$('#Products').jqGrid('restoreRow',last_selected_row);
$('#Products').jqGrid('saveRow',row_id);
$("#Products").jqGrid('editRow',row_id, true, null,
function(){ $("#Products").trigger("reloadGrid", [{current: true}]); },
'xtras/Products.php',
null,{},
{},{}
);
$("#Products_ilsave").removeClass('ui-state-disabled');
$("#Products_ilcancel").removeClass('ui-state-disabled');
$("#Products_ilcancel").removeClass('ui-state-disabled');
$("#Products_ilcopy").addClass('ui-state-disabled');
$("#Products_iladd").addClass('ui-state-disabled');
}
}
和导航定义:
$("#Products").jqGrid("navGrid", "#Products_pager",
{search: true, add: false, edit: false, del: true, refreshstate: "current"},
{},
{},
{},
{},
{sopt:['eq','ne','cn','bw','bn','ge','le','lt','gt'], multipleSearch:true, showQuery: false}
)
.jqGrid("inlineNav", "#Products_pager",
{add: true, edit: true},
)
.navButtonAdd('#Products_pager',{
caption:"",
title:"Copy selected row",
id:"Products_ilcopy",
buttonicon:"ui-icon-copy",
onClickButton: function(){
var srcrowid = $grid.jqGrid('getGridParam', 'selrow');
if (srcrowid > 0) {
$('#Products_iladd').click();
var rowData = $('#Products').jqGrid('getRowData', srcrowid);
rowData.ID = '';
rowData.Catalogue = '';
rowData.UPCEAN = '';
rowData.copyID = srcrowid;
$grid.jqGrid('setRowData', 'new_row', rowData);
var ondblClickRowHandler = $('#Products').jqGrid("getGridParam", "ondblClickRow");
ondblClickRowHandler.call($("#Products")[0], 'new_row');
} else {
alert('Please select a row to copy');
return false;
}
},
position:"last"
});
正如您所看到的,当我单击“复制”按钮时,将创建一个新行,并调用ondblClickRow
以进入内联编辑。如果我点击navGrid
中的保存按钮,它会保存但不会重新加载。如果我按Enter键,它将重新加载,但不会保存任何内容
请问之后如何保存和重新加载网格
--------------更新---------------------
添加、编辑、删除、复制—所有相同的URL—'xtras/Products.php'
url:'xtras/Products.php',
editurl:'xtras/Products.php',
datatype: "json",
mtype:'GET',
$(“#产品”)-是页面上唯一的网格
使用-jqGrid 4.4.2当前代码中的主要问题如下:只为
editRow
的一个直接调用指定使用reloadGrid
的回调。另一方面,您使用的是inlineav
,它还有另外两个editRow
调用:一个单击编辑按钮,另一个单击添加按钮。在这种情况下,将不会重新加载网格。“复制选中行”按钮的实现还存在一些其他问题。所以我决定重写你使用的代码。生成的代码可能如下所示
var editOptions={
凯斯:没错,
aftersavefunc:函数(){
var$self=$(本);
setTimeout(函数(){
$self.trigger(“reloadGrid”,[{current:true}]);
}, 50);
},
url:“xtras/Products.php”
},
gridIdSelector=“#产品”,
pagerIdSelector=“#产品_寻呼机”,
$grid=$(gridIdSelector);
$.extend($.jgrid.search{
sopt:[“eq”、“ne”、“cn”、“bw”、“bn”、“ge”、“le”、“lt”、“gt”],
多重搜索:正确
});
//创建网格
$grid.jqGrid({
...
寻呼机:寻呼机选择器,
ondblClickRow:函数(rowid){
var$self=$(此),
savedRow=$self.jqGrid(“getGridParam”、“savedRow”);
如果(savedRows.length>0&&savedRows[0].id!==rowid){
//取消编辑正在编辑的另一行
//双击当前编辑时不取消
$self.jqGrid(“restoreRow”,savedRows[0].id);
}
if(savedRows.length==0){
$self.jqGrid(“editRow”,rowid,editOptions);
}
}
})
.jqGrid(“navGrid”,pagerIdSelector,{add:false,edit:false,refreshstate:“current”})
.jqGrid(“inlineNav”,pagerIdSelector,{editParams:editOptions,addParams:{addRowParams:editOptions}})
.jqGrid(“NavButtonAd”,页面选择器{
标题:“,
标题:“复制所选行”,
id:$grid[0]。id+“\u ilcopy”,
按钮图标:“ui图标复制”,
onclick按钮:函数(){
var$self=$(this),p=$self.jqGrid(“getGridParam”),rowData,
srcrowid=p.selrow,savedRows=p.savedRow;
if(srcrowid!==null){
如果(savedRows.length>0){
//取消编辑
$self.jqGrid(“restoreRow”,savedRows[0].id);
}
rowData=$self.jqGrid(“getRowData”,srcrowid);
rowData.ID=“”;
rowData.catalog=“”;
rowData.UPCEAN=“”;
rowData.copyID=srcrowid;
$self.jqGrid(“addRow”{
initdata:rowData,
addRowParams:editOptions
});
}否则{
警报(“请选择要复制的行”);
返回false;
}
}
});
//启用/禁用编辑开始/结束时的按钮
$grid.bind(“jqGridInlineEditRow JQGridInlineAfterAverow jqGridInlineAfterRestoreRow”,函数(){
var$self=$(此),
savedRow=$self.jqGrid(“getGridParam”、“savedRow”);
如果(savedRows.length>0){
//某行正在编辑
$(GridSelector+“\u ilsave,”+GridSelector+“\u ilcancel”).removeClass(“ui状态已禁用”);
$(GridSelector+“_ilcopy,”+GridSelector+“_iladd,”+GridSelector+“_iledit”).addClass(“ui状态已禁用”);
}否则{
//现在没有行正在编辑
$(gridIdSelector+“\u ilsave,”+gridIdSelector+“\u ilcancel”).addClass(“ui状态已禁用”);
$(gridIdSelector+“\u ilcopy,”+gridIdSelector+“\u iladd,”+gridIdSelector+“\u iledit”)。removeClass(“ui状态已禁用”);
}
});
您可以看到,我定义了一个对象editOptions
,稍后将其用作所有情况下的editRow
选项。此外,我还使用jqGrid的savedRow
参数,该参数保存有关当前编辑(关于内联或单元格编辑)行的信息。如果savedRow
是空数组,则现在不编辑任何行。如果不为空,则数组项的id
属性包含编辑行的rowid。在“复制所选行”按钮的onClick处理程序中,我还使用了直接调用addRow
方法。在所有jqGrid问题中,了解以下几点很重要:您使用的是哪个datatype
?是否需要从服务器本地重新加载的数据?您使用哪个editurl
?您是在本地还是在服务器上编辑和保存数据?Ir$(“#产品”)
同一个网格还是另一个网格?您使用哪个版本的jqGrid和jqGrid的哪个分支(旧jqGrid、免费jqGrid、Guriddo jqGrid JS)?@Oleg Hi,当然抱歉。。。我已经更新了帖子…嗨,奥列格,我理解了你的解释和代码-我了解了副本中对addRow
的直接调用,以及你为什么要使用editOptions
对象。我不知道有savedRow
参数,所以这很有帮助。稍后我将尝试您的代码,并让您知道。您的代码几乎按预期工作。。但是保存
按钮始终处于禁用状态。。。。因为它只在savedRows.length>0上启用,而save
之后调用它。。。顺便说一句,您在initdata:rowData
@Elen:您没有提供复制代码的演示,所以我