我有一个包含某些列的 jqgrid。我正在尝试调用 custom_function 来验证单元格值。
我还将正则表达式从数据库获取到 rowData 中,我想用它来验证单元格值。
var ret = jQuery("#settingsListGrid").jqGrid('getRowData', id);
cm.editrules = {
required: true,
custom: true,
custom_func: ValidateData,
custom_value:ret.RegX
};
所以我需要将 rowData 传递给自定义函数。
ValidateData = function (value, colname, customValue) {
return customValue.test(value) ?
[true] :
[false, "Invalid Data"];
}
我想使用customValue传递rowData
请帮忙?
最佳答案
答案取决于您使用的 jqGrid 的分支。我理解你写的问题,但是必须更改jqGrid(自定义验证的实现)的代码才能实现需求。
在 Tony Tomov 更改了 jqGrid 的许可协议(protocol),将他的产品在版本 4.7.1 中重命名为 Guriddo jqGrid JS(参见 the post )并将其商业化(参见价格 here )后,我开发了 jqGrid 的免费 jqGrid 分支。 。在基于上一个免费的4.7版本开始开发后,我对代码进行了大量的更改和改进,并实现了许多新功能。您需要的功能从版本 4.12.1 开始实现(请参阅 here )。因此,更新到当前免费的 jqGrid 4.13.2 后,您可以轻松解决您的问题。
新功能的工作原理如下:
editrules: {
required: true,
custom: ValidateData,
custom_value: ret.RegX
}
重要的是,应将自定义验证函数指定为 custom
的值。属性而不是用法custom_func
。它允许免费的 jqGrid 保持与旧版本的兼容性(通过 custom: true
和 custom_func
),但通过函数提供验证回调的新参数作为 custom
的值属性。
新款ValidateData
看起来像
var ValidateData = function (options) {
return customValue.test(options.newValue) ?
[true] :
[false, "Invalid Data"];
}
只有一个 options
参数,它有许多您可以使用的属性。这种风格允许提供许多有用的信息,而不需要有很多不需要的参数。此外,回调选项的样式允许扩展 options
对象在未来版本中不会破坏与以前版本的兼容性。
options
参数具有以下属性
-
newValue
- 需要验证的当前(修改后的)值 -
oldValue
- 修改之前单元格的先前值(旧值) -
cmName
- 列名称。如果您在许多列中使用一个回调函数并且希望为不同的列实现一些不同的行为,那么这可能是实用的。在验证错误的情况下,它还有助于生成可读的错误消息。 -
iCol
- 当前索引colModel
对应于列(列cmName
) -
cm
-colModel
的元素,代表当前验证的列。 -
rowid
- 当前编辑行的 rowid。可以使用getLocalRow
例如,在编辑之前获取其他列的内容。需要注意的是getLocalRow
仅在使用datatype: "local"
时有效或loadonce: true
。方法getRowData
或getCell
可以安全地用于在表单编辑模式下获取数据或访问当前未编辑的数据(在单元格或内联编辑模式下)。 -
iRow
- 当前编辑行从网格顶部开始的数字索引(从 HTML 顶部<table>
) -
oldRowData
- 仅在使用内联编辑或单元格编辑时才会设置。它不是在表单编辑模式下定义的。它代表值 -
mode
- 显示现在使用哪种编辑模式。可以是"addForm"
,"editForm"
(在使用形式编辑的情况下),"cell"
(单元格编辑),"add"
或"edit"
(内联编辑)。在其他一些回调函数中,该属性可能有两个其他值:"filter"
(过滤器工具栏中的字段)或"search"
(用于验证搜索对话框的字段) -
tr
和td
- 将使用表单编辑模式进行编辑的网格行和单元格的 DOM 元素。仅在表单编辑时才会设置属性。
我希望 options
的一大组属性参数允许您轻松实现任何自定义验证的要求。
关于jqgrid - 将 RowData 传递给 Jqgrid 中的 Custom_func,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36547041/