2013-07-09 40 views
2

我在我的網格(jqGrid 4.5.2)中使用Form EditingInline Editing。當我有一個可編輯的列,然後打開表單時,我確實看到了HTML代碼而不是值。截圖顯示了我的意思。jqGrid表單編輯,HTML代替值在表單域

jqGrid with HTML code

如果沒有字段對應行中的編輯,一切都很好。我已經讀過某處,我不會一起使用FormInline editing,但只能隱約記住。但是,實際上所有工作都很好,除了這種特殊情況。

在創建Form Editing顯示器之前,是否可以將整行重置爲只讀(文本)?其他解決方案?

- 編輯1:奧列格的答案---

我已籤/調試到function restoreInline(),並注意到兩兩件事:

  1. 我沒有連續的行ID,而是要像1,2 ,4,9(我的數據庫主鍵)。它們是獨一無二的,但有些數字在兩者之間缺失。因此,條件if ($t.p.savedRow[i].id == rowid)未被滿足,並且restoreRow根本沒有被調用。我不能在ID中有這樣的空白嗎?之前從未發現過這個問題。
  2. 我做了一個交叉檢查,第一行和id爲「1」。在這種情況下,調用$($t).jqGrid('restoreRow',rowid),但我仍然在我的字段中看到「HTML代碼」。

- 編輯2 -

明確地稱爲beforeShowFormjqGrid('restoreRow',rowid),但沒有成功。

+1

我仍然認爲你有id重複的問題。如果你有rowid = 1的網格,那麼你可以嘗試使用'$(「* [id = 1]」)或$(「* [id ='1']」)''而不是'$(「 #1" )'。 '$(「#1」)。length'的值總是<= 1,但是'$(「* [id = 1]」)'會讓你擁有'id =「1」 '。因此,如果存在多個作爲具有'id =「1」''的元素存在的情況,則使用'$(「* [id = 1]」)得到'** all **元素和'$(「* [id = 1]「)。」length「可能大於1. – Oleg

+1

例如,我最近回答了在添加/編輯表單打開和關閉後網格重新加載不工作的問題。問題在於用戶對網格使用了相同的id值('

')和列的名稱。在打開添加/編輯表單後,新的''元素被創建爲與網格的「
」相同的id。因此,所有在網格中插入行都不起作用,因爲有人試圖在隱藏表單的''中插入''。我只想強調** id重複問題將主要間接創建**。 – Oleg

+1

[The answer](http://stackoverflow.com/a/509965/315935)包含不完美,但非常好的代碼來檢測id重複的問題。 – Oleg

回答

2

表格編輯應調用內部restoreInline(請參閱其代碼here),在初始化編輯表單之前調用restoreRow作爲行。該函數將在beforeInitData之後直接調用(請參閱the line)。因此,如果您需要保存行而不是放棄數據,例如您可以在beforeInitData回調中執行此操作。

我想你在網格中有一些id重複。所以restoreRow的調用不會恢復數據。另一個可能的原因可能是jqGrid中的一個錯誤,但是你必須調試你的代碼,看看爲什麼restoreInline函數將不會被調用,或者它爲什麼不能恢復行。

+0

將會在一段時間後檢查並報告,我很可能會排除重複ID,我們來看看會發現哪些調試。非常感謝! –

+0

以上更新,認爲這是正確的想法,但不知何故混淆了我。 –

+0

@HorstWalter:數組'$ t.p.savedRow'包含在線編輯方面正在編輯的rowid列表。所以條件'if($ t.p.savedRow [i] .id == rowid)'意味着:「如果當前行(開始表單編輯)正在編輯內聯編輯」。我不能給你更多的提示,因爲你幾乎沒有發佈信息:沒有JavaScript代碼,沒有輸入數據(ID爲1,2,4,9),沒有測試用例。如果你自己沒有解決問題,你應該附上更多信息。 – Oleg