2011-07-25 17 views
2

在更改的行被保存之前,需要調用自定義函數來驗證保存的可能性。如何在jqgrid中實現行級別驗證

如果這個自定義函數返回false,行保存應該被取消,並且行應該保持在編輯模式,所以 錯誤可以糾正並再次保存。

如何驗證行內聯和表單編輯模式? 我還沒有找到任何行級別驗證功能。首先我要添加自定義驗證功能到列來驗證 行或有更好的解決方案嗎?

回答

6

如果我理解你正確,你應該使用自定義驗證editrules

editrules: { 
    custom:true, 
    custom_func: function(value,colname) { 
     // return [true,""] in case of successful validation 
     // [false,"Your error message"]; in case of validation error 
    } 
} 

jqGrid documentation的代碼示例。

jqGrid只有單元格級別驗證,但取決於您如何使用內聯編輯(例如,只有一行處於編輯模式和一次),您可以從整個編輯行中獲取數據。你有很多選擇。例如,您可以手動獲取行數據,或者只需定義所有對感興趣的列的驗證規則,即驗證第一列的內容,您只需將value保存在外部對象的屬性中並且位於最後一個驗證函數的內部您可以訪問所有保存的數據以進行真正的行驗證。

+0

驗證用於將未保存的標題數據發送到需要在保存細節之前或之後保存的服務器。我試過'editrules = {custom = true, custom_func = function(value,colname){ if(!SaveHeader())return [false,''];否則返回[true,'']; }}。出錯時,SaveHeader輸出錯誤消息並返回false。但是,即使custom_func返回[false,''],jqGrid仍會打印錯誤消息。如何抑制此錯誤消息或至少在錯誤消息中打印列值?還是更好/如何將表單數據與行數據一起發送到服務器中編輯/添加方法? – Andrus

+1

@Andrus:客戶端驗證正好向用戶顯示錯誤數據的消息,所以我不明白你爲什麼試圖使用'[false','']'。 'SaveHeader'應該不會顯示**任何消息,但是會讓你回來,'custom_func'應該返回消息作爲數組的第二個元素。 – Oleg

+0

謝謝。兩個問題:1. jqGrid在消息本身的開始處打印列值。該值與行驗證錯誤無關,所以我正在尋找一種方法來放棄它。 2. jqGrid錯誤信息出現在模態對話框中。 SaveHeader()將無模式的錯誤信息添加到屏幕中,我正在尋找這種信息的一種方式。 – Andrus