2013-07-09 41 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