2010-04-27 111 views
1

有谁知道jqGrid内嵌编辑是否抛出可以处理的事件?以下代码是我试图完成的一个简单示例:jqGrid“Esc”取消内嵌编辑事件

jQuery('#list').jqGrid('editRow', 0, true, false, false, false, {onClose: function(){alert('onClose')}}, reloadGrid); 

我希望能够处理“Esc”取消事件。 onClose事件可通过表格编辑获得:

查看respective section in jqGrid's documentation

但不与在线编辑和内联编辑文档工作,不提供任何事件比extraparam选项,这是非常明智的非特异性其他:

http://www.trirand.com/jqgridwiki/doku.php?id=wiki:inline_editing

我一直没能弄清楚如何利用extraparam选项。建议?

回答

2

根据你的链接:

extraparam:类型名称的数组:值。设置时,将这些值与其他值一起发布到服务器。

因此,这只允许您通过POST将自定义数据传递回服务器。它不会允许您添加事件处理程序。

editRow的jqGrid的源代码包含Esc键的下面的处理程序:

if (e.keyCode === 27) {$($t).jqGrid("restoreRow",rowid, afterrestorefunc);} 

所以引发事件。根据文档:

afterrestorefunc如果已定义,则在恢复该行后调用此函数。为了实现这个功能,我们通过了rowid

所以没有显式的函数回调函数,虽然按下转义键会触发afterrestorefunc。不幸的是,当行通过回车键保存也被称为本次活动:

if (e.keyCode === 13) { 
    var ta = e.target; 
    if(ta.tagName == 'TEXTAREA') return true; 
    $($t).jqGrid("saveRow",rowid,succesfunc, url, extraparam, aftersavefunc,errorfunc, afterrestorefunc); 
    return false; 
} 

但如果你细心,你可能能够使用afterrestorefunc满足您的需求。

0

嘿贾斯汀感谢您的及时回应和帮助。

虽然afterrestorefunc回调显示承诺我的查询它仍然不是我正在寻找在这一点上。据我所见,唯一的原因是如果我调用restoreRow方法。但我面临的问题是editRow正在通过“Esc”键关闭,我需要能够处理该事件。然而,你的反应让我思考了editRow回调,有一个afterrestorefunc回调定义有作为:

jQuery("#grid_id").jqGrid('editRow',rowid, keys, oneditfunc, succesfunc, url, extraparam, aftersavefunc,errorfunc, afterrestorefunc); 

这正是我需要的,似乎是完美的工作。虽然你的回答不是100%适合我的问题,但它肯定指出了我的正确方向。谢谢您的帮助。