我正在使用jqgrid进行列表和基本的crud操作。在其中一个页面上,表单上有许多可以为空的字段。添加实体时,如果某些值保留为空,则会将这些字段保存在db中,并保留为null(这很好)。但是当在jqgrid编辑弹出窗口中编辑相同的字段时,这些字段的文本框包含。我该如何解决这个问题
下图是单击网格中的一行并选择编辑
时出现的更新对话框
更新2
我没有jqgrid.editform.js,但提到的代码Oleg直接出现在jquery.JQGrid.min.js中。我删除了行,现在代码看起来像
switch(C[G].edittype)
{
case "password":
case "text":
case "button":
case "image":
case "textarea":
if(A==" "||A==" "||(A.length==1 && A.charCodeAt(0)==160)) {
A = "";
alert("here");
}
alert(A);
a("#"+r,"#"+v).val(A);
break;
case "select":
我已经发出两条警告消息来检查代码路径是否已执行但我在运行页面时没有发现任何警报。这可能有什么不对。
由于
答案 0 :(得分:2)
我想您应该使用相应的editoptions选项来解决问题:
editoptions: {NullIfEmpty: true}
更新:如果我现在正确理解您的问题,您可以使用beforeSubmit
或onclickSubmit
表单编辑回调来修改或全部删除postdata
参数中的空值。例如,您可以使用for-in
循环来枚举posdata
的所有属性。如果某个参数的值为空,则可以使用delete
删除该属性,或使用= null
将空字符串更改为null
。在这两种情况下,您都应该将null
作为空编辑值的值。
更新2 :您使用的版本3.6.5实际上是非常旧。幸运的是,我的档案中有jqGrid的版本。我希望您的问题的原因是旧版本的代码中的错误。如果您使用非最小化版本的jqGrid,则可以打开grid.formedit.js
文件并删除第832-833行:
$("#"+nm,"#"+fmid).val(tmp);
break;
介于case "image":
和case "textarea":
之间。代码应该与当前版本的jqGrid类似:请参阅here。要解决jqGrid的最小化版本中的问题,您应该搜索文本case "button":case "image":
并删除a("#"+r,"#"+v).val(A);break;
之后case "button":case "image":
之前和case "textarea":
之前的{{1}}。