大家好我正在使用可编辑的jqGrid(v4.4)创建一个Web应用程序,默认情况下,当您处于编辑模式(内联编辑)时,按Enter键会调用jqGrid的saveRow方法,实际上试图保存该行。
问题在于我一直在使用自定义方式来保存我的行,而我只在使用saveRow之后才先执行其他操作。
我为Enter创建了一个键绑定,如下所示:
$(document).keyup(function (e) {
if (e.keyCode == 13) {
if (lastsel) {
jQuery('#list').jqGrid('saveRow', lastsel, false, 'clientArray');
var rowData = jQuery('#list').jqGrid('getRowData', lastsel);
// alert(rowData);
// alert(JSON.stringify(rowData));
jQuery.post('Home/Save?inputEmployee=', JSON.stringify(rowData));
lastsel = false;
}
}
});
问题在于它同时执行了jqGrid为绑定定义的内容以及我上面所做的事情。
在使用我之前,有什么方法可以摆脱先前的Enter绑定吗?
编辑: 我注入了HomeController Save方法:
public void Save(string inputEmployee)
{
Employee employeeData = JsonConvert.DeserializeObject(inputEmployee.ToString(), typeof(Employee)) as Employee;
var context = new EmployeeDataContext();
Employee employee = context.Employees.Single(e => e.ID == employeeData.ID);
employee = employeeData;
context.SubmitChanges();
}
所以我做的是创建了一个LINQ to SQL模型,并使用它的上下文从/向数据库获取/设置数据。所以我想我会将一个Employee字符串化对象作为参数传递,然后用我的控制器反序列化它。
答案 0 :(得分:1)
在我看来,您选择的不是实施要求的最佳方式。从您发布的代码中可以看到您想要使用本地编辑(editRow的url: "clientArray"
选项),但是您希望在保存之后另外执行一些附加操作行。在这种情况下,最好的选择可能是使用aftersavefunc
回调。因此editRow
的调用可能类似于
onSelectRow: function (id) {
var $this = $(this);
...
$this.jqGrid("editRow", id, {
keys: true,
url: "clientArray",
aftersavefunc: function (rowid) {
$.post("Home/Save",
JSON.stringify($this.jqGrid("getRowData", rowid)));
}
});
....
}
我不确定您希望如何将数据发送到Home/Save
网址。您使用了inputEmployee
参数,没有任何值。您可以根据您的具体要求调整上述代码。
答案 1 :(得分:0)
您可以使用jQuerys .data()方法获取元素的现有事件处理程序
基本上你
以下是一个例子
var el = $(document)
el.on("keydown",function (e) {
console.log("First Event"); //Set the first Handler
});
var h = jQuery._data( document, "events" ).keydown[0].handler; //The (first) Handler
el.off("keydown",h)
el.on("keydown",function (e) {
console.log("Second Handler")
h(e);
});
//Second Handler
//First Handler
我记得曾经像el.data("events")
那样做seems deprecated