我在页面上有两个jqGrids。我们的想法是在更新下拉值时显示确认对话框,当用户按Enter键保存记录时,jqGrids都会重新加载。
这是我的专栏模型:
{
key: false, name: 'InterestedValue', index: 'InterestedValue', editable: true,
sortable: false, formatter: 'select', width: '120px', search: false,
edittype: 'select',
editoptions: {
value: InterestedStatusList,
//afterSaveCell: function (rowid, cellname, value, iRow, iCol) {
// alert("after savecell" + rowid + " cellname= " + cellname);
// //$(this).trigger('reloadGrid');
//},
successfunc: function (response) {
alert("success");
//FLAG = true;
$(this).trigger('reloadGrid')
return true;
}
}
},
事件,
serializeRowData: function (postdata) {
var response = JSON.stringify(postdata);
var s = '';
$(postdata).each(function (index, data) {
//s += '<option value="' + index + '">' + data + '</option>';
$.each(data, function (k, v) {
if(k=="InterestedValue")
s += v;//'<option value="' + k + '">' + v + '</option>';
});
});
//
if (s == "2_1") {
if (confirm('Are you sure you want to deactivate this record? ')) {
// do things if OK
return postdata;
}
else
return false;
}
return postdata;
},
我能够在serializeRowData
事件后获取使用数据调用的编辑操作方法。但我无法弄清楚如何在更新完成后成功触发网格的重新加载。所以请告诉我serializeRowData
之后哪个事件被解雇了。我也尝试了列中的successfunc
,但是当我单击该行并进入编辑模式时,会立即触发。
答案 0 :(得分:0)
如果用户选择“危险”值,则可以考虑显示确认对话框,将值发送到服务器之前。要实现这一点,您可以使用
{
name: 'InterestedValue', ...
edittype: 'select',
editoptions: {
value: InterestedStatusList,
dataEvents: [
{
type: 'change',
fn: function () {
var newValue = $(this).val();
if (newValue === "2_1" && !confirm('Are you sure you want to deactivate this record?')) {
$(this).val("2_0"); // set some another value
}
}
}
]
}
}
或者您可以使用内嵌编辑的beforeEditRow
回调,但 指定的确切位置取决于您如何使用内联编辑(直接调用) editRow
的使用,inlineNav
的使用,formatter: "actions"
或其他的使用)以及jqGrid的版本(直到版本4.7),free jqGrid(请参阅readme您使用的{}和wiki)或Guriddo jqGrid JS。
答案 1 :(得分:0)
感谢@Oleg。
的详细信息我之前发布的 serializeRowData 方法能够在取消激活记录之前为用户提供JavaScript确认对话框。这是我在服务器上完成更新后如何重新加载jqGrids的方法。
我使用了editRow
$(gridId).jqGrid("editRow", 'kkk', true, '', '', '', '', reload)
在重载方法中,我触发了将jqGrids重新加载为
function reload(rowid, result) {
var s = '';
var o = false;
var postdata = JSON.stringify(result);
$(jQuery.parseJSON(postdata)).each(function (index, data) {
$.each(data, function (k, v) {
s += k + ":" + v + " --- ";
if (k == "responseText")
{
if (v.indexOf("Deactivated") != -1)
o = true;
}
s += k + ":" + v + " --- ";
});
});
if (o ==true) {
//reload both grids
$("#grid1").trigger("reloadGrid");
$("#grid2").trigger("reloadGrid");
} }
希望有所帮助。