2010-04-27 82 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%適合我的問題,但它肯定指出了我的正確方向。謝謝您的幫助。