Javascript jqGrid表单编辑,表单字段中的值改为HTML
我在我的网格中使用和(jqGrid 4.5.2)。当我有一个可编辑的列,然后打开表单时,我确实看到了HTML代码而不是值。截图显示了我的意思 如果对应行中没有可编辑的字段,则一切正常。我在某个地方读过,我不会将Javascript jqGrid表单编辑,表单字段中的值改为HTML,javascript,jquery,jqgrid,Javascript,Jquery,Jqgrid,我在我的网格中使用和(jqGrid 4.5.2)。当我有一个可编辑的列,然后打开表单时,我确实看到了HTML代码而不是值。截图显示了我的意思 如果对应行中没有可编辑的字段,则一切正常。我在某个地方读过,我不会将表单和内联编辑一起使用,只会模糊地记得。然而,事实上,除了在这种特殊情况下,一切都很正常 在创建表单编辑显示之前,是否可以将整行重置为只读(文本)?还有其他解决办法吗 --编辑1:奥列格的答案--- 我已经检查/调试了函数restoreInline(),并注意到两件事: 我没有连续的行I
表单
和内联编辑
一起使用,只会模糊地记得。然而,事实上,除了在这种特殊情况下,一切都很正常
在创建表单编辑
显示之前,是否可以将整行重置为只读(文本)?还有其他解决办法吗
--编辑1:奥列格的答案---
我已经检查/调试了函数restoreInline()
,并注意到两件事:
if($t.p.savedRow[i].id==rowid)
条件未满足,并且根本未调用restoreRow
。我不能在ID中有这样的间隙吗?以前从未注意到这方面的问题$($t).jqGrid('restoreRow',rowid)
,但我仍然在字段中看到“HTML代码”已在中显式调用
jqGrid('restoreRow',rowid)
,但未成功。表单编辑应调用内部restoreInline
(参见其代码),该行在初始化编辑表单之前调用restoreRow
。函数将在beforeInitData
之后直接调用(请参阅)。因此,如果您需要保存行而不是丢弃数据,例如,您可以在beforeInitData
回调中执行此操作
我想网格中有一些重复的id。因此,
restoreRow
的调用不会还原数据。另一个可能的原因可能是jqGrid中的错误,但您必须调试代码,以了解在您的情况下为什么不会调用restoreInline
函数,或者为什么它不会还原行。将在一段时间后检查并报告,我很可能排除重复的ID,让我们看看调试将发现什么。谢谢你!更新了以上内容,认为这是正确的想法,但不知何故让我感到困惑。@HorstWalter:Array$t.p.savedRow
包含正在进行内联编辑的行的行ID列表。因此,条件if($t.p.savedRow[i].id==rowid)
意味着:“如果当前行(表单编辑开始的位置)正在就内联编辑进行编辑”。我不能给你更多提示,因为你几乎没有发布任何信息:没有JavaScript代码,没有输入数据(ID为1,2,4,9),没有测试用例。如果你自己不解决这个问题,你应该在问题后面加上更多的信息。我仍然认为你有重复的问题。如果您有rowid=1的网格,那么您可以尝试使用$(“*[id=1]”)来代替$(“*[id=1]”)来或$(“*[id='1']”)来。例如,$(“#1”).length的值一直是我最近回答的一个问题,即在打开和关闭添加/编辑表单后,网格的重新加载不起作用。问题是用户对网格(
)和列的名称使用了相同的id值。打开添加/编辑表单后,新的
元素使用与网格的
相同的id创建。所以网格中所有行的插入都不起作用,因为有人尝试将
作为隐藏形式的
中的子行插入。我只想强调,身份证重复问题主要是间接造成的。包含不完美的代码,但是非常好的代码来检测id重复问题。非常好的提示,我更关注原始数据,而不是DOM id,可能是意外地包含重复项。不幸的是,仍然没有找到根本原因,所提到的代码(检测重复项)没有显示任何内容。也有一个具有类似名称(Id)的网格头,但更改其值也没有帮助。不过,我会密切留意情况,并可能找出原因。将与同一应用程序中的其他网格(tbd)进行交叉检查。如果您发布了重现问题的演示(包括一些ID为1,2,4,9的测试数据,如您之前所写),我可以检查演示。如果你有一个在线网址,我也可以看看。无论如何,如果$(this).jqGrid('restoreRow',rowid)
在beforeShowForm
中,请不要还原编辑行,因为您的ID有一些问题。