如果保存了新行,如何启用“在编辑操作中单击”按钮jqgrid
编辑格式化程序操作按钮放置在jqgrid列:如果保存了新行,如何启用“在编辑操作中单击”按钮jqgrid,jqgrid,Jqgrid,编辑格式化程序操作按钮放置在jqgrid列: colModel: [{"fixed":true,"label":" change ","name":"_actions","width":($.browser.webkit == true? 37+15: 32+15) ,"align":"center","sortable":false,"formatter":"actions", "formatoptions":{"keys":true,"delbutton":false,"onSucc
colModel: [{"fixed":true,"label":" change ","name":"_actions","width":($.browser.webkit == true? 37+15: 32+15)
,"align":"center","sortable":false,"formatter":"actions",
"formatoptions":{"keys":true,"delbutton":false,"onSuccess":function (jqXHR) {actionresponse = jqXHR;return true;}
,"afterSave":function (rowID) {
cancelEditing($('#grid'));afterRowSave(rowID,actionresponse);actionresponse=null; }
,"onEdit":function (rowID) {
if (typeof (lastSelectedRow) !== 'undefined' && rowID !== lastSelectedRow)
cancelEditing($('#grid'));
lastSelectedRow = rowID;
}
}}
在loadcomplete事件中将新行添加到jqgrid
var newRowData = {};
var newRowId = '_empty' + $.jgrid.randId();
$('#grid').jqGrid('addRowData', newRowId, newRowData);
如果单击“保存操作”按钮,其id将更新:
function aftersavefunc(rowID, response) {
restoreActionsIcons();
$('#grid').jqGrid('resetSelection');
var json = $.parseJSON(response.responseText);
$("#" + rowID).attr("id", json.Id);
lastSelectedRow = json.Id;
$("#grid").jqGrid('setSelection', lastSelectedRow);
}
单击“保存操作”按钮后,“编辑操作”按钮单击将被忽略。首次编辑后,无法重新进入编辑模式
如何解决此问题,以便保存后再次单击“编辑”按钮可以编辑行
更新
我按照Oleg答案中的建议添加了$(this).focus(),并按照Oleg在其他优秀答案中的建议将id更改包装到setTimeout中:
function aftersavefunc(rowID, response) {
restoreActionsIcons();
$(this).focus();
$('#grid').jqGrid('resetSelection');
var json = $.parseJSON(response.responseText);
setTimeout(function () {
$("#" + rowID).attr("id", json.Id);
lastSelectedRow = json.Id;
$("#grid").jqGrid('setSelection', lastSelectedRow);
}, 50);
}
问题依然存在。该问题可能与行id更改有关,因为:
alert( cm.formatoptions);
if (!$.fmatter.isUndefined(cm.formatoptions)) {
op = $.extend(op, cm.formatoptions);
}
首先单击警报输出“对象”。在随后单击保存按钮时,它输出未定义的内容。因此,由于未知原因,formatoptions被清除
评论意见:
由于新问题发生在添加rowactions()调用之后,并且如果删除这些调用则不会发生,因此这似乎与回答中建议的代码有关。我认为问题的存在是因为隐藏了当前焦点所在的按钮。请看下面的代码。如果删除行
$(this).focus();/将焦点设置在某个地方
其中一个问题与您描述的问题相同。因此,我建议您在隐藏当前具有焦点的按钮后,尝试将焦点设置在某个位置,例如在restoreActionsIcons
中,将焦点设置到网格的表
元素的任何位置。我不能测试这个,但我希望它会有帮助
更新:我再次检查了您的问题,希望能为您提供解决方案
你的问题可以分为两个子问题。您的主要问题是更改行的id。所以这不是每个人都有的共同问题
问题是“操作”格式化程序直接在HTML代码中创建onclick
函数(参见示例):
因此,函数将包含原始的rowid。要解决此问题,您可以在中的setTimeout
内修改aftersavefunc
的代码片段
$("#" + rowID).attr("id", json.Id);
lastSelectedRow = json.Id;
$("#grid").jqGrid('setSelection', lastSelectedRow);
类似于以下内容:
var $tr = $("#" + rowID),
$divEdit = $tr.find("div.ui-inline-edit"),
$divDel = $tr.find("div.ui-inline-del"),
$divSave = $tr.find("div.ui-inline-save"),
$divCancel = $tr.find("div.ui-inline-cancel");
$tr.attr("id", json.Id);
if ($divEdit.length > 0) {
$divEdit[0].onclick = function () {
$.fn.fmatter.rowactions(newId,'grid','edit',0);
};
}
if ($divDel.length > 0) {
$divDel[0].onclick = function () {
$.fn.fmatter.rowactions(newId,'grid','del',0);
};
}
if ($divSave.length > 0) {
$divSave[0].onclick = function () {
$.fn.fmatter.rowactions(newId,'grid','save',0);
};
}
if ($divCancel.length > 0) {
$divCancel[0].onclick = function () {
$.fn.fmatter.rowactions(newId,'grid','cancel',0);
};
}
lastSelectedRow = json.Id;
$("#grid").jqGrid('setSelection', lastSelectedRow);
第二个问题是在ID中使用特殊字符。我在中发现了一个bug,需要修复该bug以支持ID中的特殊字符。问题是在jquery.fmatter.js
行中,原始rowid参数rid
将被更改:
rid = $.jgrid.jqID( rid )
稍后,到处都将使用修改过的id。例如,在id中是my.id
,编码版本将是my\\.id
。对于代码的大多数位置,它都是正确的(请参阅),但作为editRow
、saveRow
、restoreRow
、delGridRow
、setSelection
和editGridRow
(请参阅行-)的rowid参数,它是不正确的。因此,必须修复代码,以使用调用的原始未转义(未编码)rid
值
我想我明天会发布相应的bug报告,并在中提供建议
更新2:代码
$.fn.fmatter.rowactions(newId,'grid','edit',0)我上面写的代码>只是一个例子。我从你发给我的测试演示中得到的。当然,您应该根据自己的需要修改代码。例如,您可以从您使用的网格id中的$.fn.fmatter.rowactions
的第二个参数中看到的方式:'grid','list'类似于myGrid[0]。id
。最后一个参数应该是colModel
中具有formatter:'actions'
的列的索引。您可以在旧问题上使用getColumnIndexByName
函数来按列名获取索引。我认为问题的存在是因为隐藏了当前焦点所在的按钮。请看下面的代码。如果删除行$(this).focus();/将焦点设置在某个地方
其中一个问题与您描述的问题相同。因此,我建议您在隐藏当前具有焦点的按钮后,尝试将焦点设置在某个位置,例如在restoreActionsIcons
中,将焦点设置到网格的表
元素的任何位置。我不能测试这个,但我希望它会有帮助
更新:我再次检查了您的问题,希望能为您提供解决方案
你的问题可以分为两个子问题。您的主要问题是更改行的id。所以这不是每个人都有的共同问题
问题是“操作”格式化程序直接在HTML代码中创建onclick
函数(参见示例):
所以
rid = $.jgrid.jqID( rid )