自定义函数仅适用于编辑模式,不适用于 jqGrid 中的添加模式
Custom function only for edit mode, not add mode, in jqGrid
我有一个 jqGrid 自定义函数 editrules: { custom: true, custom_func: checkforduplicates, required:true }
但是,我希望这个功能运行只在添加模式下,而不是在编辑模式下。这可能吗?
编辑:- 在 Oleg 回答以下问题后,我将代码更改为以下内容。但是,不会打印警报。不知道我要去哪里错了。
colModel: [
{ key: true, name: 'id', editable: false, formatter: 'integer', viewable: false, hidden: true },
{
key: false,
name: 'name',
editable: true,
editrules: {
required: true,
custom: function (options) {
// options have the following properties
// cmName
// cm
// iCol
// iRow
// rowid
// mode - "editForm", "addForm", "edit", "add", "cell" and so on
// newValue - the value which need be validated
// oldValue - the old value
// some additional properties depends on the editing mode
alert("mode is " + options.mode);
if (options.mode === "add") { // "add" for inline editing
var grid = $("#grid");
var textsLength = grid.jqGrid("getRowData");
var textsLength2 = JSON.stringify(textsLength);
alert("i am here");
var myAttrib = $.map(textsLength,
function (item) { return item.name });
var count = 0;
for (var k in textsLength) {
if (textsLength.hasOwnProperty(k)) {
++count;
}
}
var text, i;
for (i = 0; i < count; i++) {
text = myAttrib[i];
if (value === text) {
return [false, " - Duplicate category name."];
}
}
return [true, ""];
}
return true;
}
}
},
免费 jqGrid 支持带有选项 value
、name
和 iCol
的旧样式 custom_func
以及 新样式 验证.要使用新样式验证,不需要指定任何 custom_func
回调,而是将 custom
定义为带有一个参数的回调函数:
editrules: {
required: true,
custom: function (options) {
// options have the following properties
// cmName
// cm
// iCol
// iRow
// rowid
// mode - "editForm", "addForm", "edit", "add", "cell" and so on
// newValue - the value which need be validated
// oldValue - the old value
// some additional properties depends on the editing mode
if (options.mode === "addForm") { // "add" for inline editing
// do the validation
}
return true;
}
}
在添加表单验证的情况下,mode
属性 等于 "addForm"
、options.iRow === -1
、options.oldValue === null
、options.rowid === "_empty"
。建议使用 options.mode
来检测免费 jqGrid 中的编辑(或搜索模式),因为其他属性(iRow
、oldValue
和 rowid
)的值取决于编辑模式。
4.7版本我用的就是这个方法。为 table 添加数据的表格 class。之后,执行用户验证的特殊操作。
{
name : "LOGIN",
index : "LOGIN", editrules: {
required:true,
custom:true,
custom_func: dublicateUser
}
...
{
closeAfterAdd : true,
width : 500,
recreateForm : true,
afterShowForm : function () {
jQuery("#TblGrid_list_users").addClass('addMode');
}
...
function dublicateUser() {
var a;
var login = jQuery('#LOGIN').val();
var checkMode = jQuery('#TblGrid_list_users').hasClass('addMode');
jQuery.ajax({
type: 'POST',
data: {login:login, mode:checkMode},
url: 'code/validate_user.php',
async: false,
success: function(data) {
if (data == 'err') {
a = 1;
}
else {
a=0;
}
}
});
if (a==1) {
return[false,"error"];
}
else {
return[true];
}
}
我有一个 jqGrid 自定义函数 editrules: { custom: true, custom_func: checkforduplicates, required:true }
但是,我希望这个功能运行只在添加模式下,而不是在编辑模式下。这可能吗?
编辑:- 在 Oleg 回答以下问题后,我将代码更改为以下内容。但是,不会打印警报。不知道我要去哪里错了。
colModel: [
{ key: true, name: 'id', editable: false, formatter: 'integer', viewable: false, hidden: true },
{
key: false,
name: 'name',
editable: true,
editrules: {
required: true,
custom: function (options) {
// options have the following properties
// cmName
// cm
// iCol
// iRow
// rowid
// mode - "editForm", "addForm", "edit", "add", "cell" and so on
// newValue - the value which need be validated
// oldValue - the old value
// some additional properties depends on the editing mode
alert("mode is " + options.mode);
if (options.mode === "add") { // "add" for inline editing
var grid = $("#grid");
var textsLength = grid.jqGrid("getRowData");
var textsLength2 = JSON.stringify(textsLength);
alert("i am here");
var myAttrib = $.map(textsLength,
function (item) { return item.name });
var count = 0;
for (var k in textsLength) {
if (textsLength.hasOwnProperty(k)) {
++count;
}
}
var text, i;
for (i = 0; i < count; i++) {
text = myAttrib[i];
if (value === text) {
return [false, " - Duplicate category name."];
}
}
return [true, ""];
}
return true;
}
}
},
免费 jqGrid 支持带有选项 value
、name
和 iCol
的旧样式 custom_func
以及 新样式 验证.要使用新样式验证,不需要指定任何 custom_func
回调,而是将 custom
定义为带有一个参数的回调函数:
editrules: {
required: true,
custom: function (options) {
// options have the following properties
// cmName
// cm
// iCol
// iRow
// rowid
// mode - "editForm", "addForm", "edit", "add", "cell" and so on
// newValue - the value which need be validated
// oldValue - the old value
// some additional properties depends on the editing mode
if (options.mode === "addForm") { // "add" for inline editing
// do the validation
}
return true;
}
}
在添加表单验证的情况下,mode
属性 等于 "addForm"
、options.iRow === -1
、options.oldValue === null
、options.rowid === "_empty"
。建议使用 options.mode
来检测免费 jqGrid 中的编辑(或搜索模式),因为其他属性(iRow
、oldValue
和 rowid
)的值取决于编辑模式。
4.7版本我用的就是这个方法。为 table 添加数据的表格 class。之后,执行用户验证的特殊操作。
{
name : "LOGIN",
index : "LOGIN", editrules: {
required:true,
custom:true,
custom_func: dublicateUser
}
...
{
closeAfterAdd : true,
width : 500,
recreateForm : true,
afterShowForm : function () {
jQuery("#TblGrid_list_users").addClass('addMode');
}
...
function dublicateUser() {
var a;
var login = jQuery('#LOGIN').val();
var checkMode = jQuery('#TblGrid_list_users').hasClass('addMode');
jQuery.ajax({
type: 'POST',
data: {login:login, mode:checkMode},
url: 'code/validate_user.php',
async: false,
success: function(data) {
if (data == 'err') {
a = 1;
}
else {
a=0;
}
}
});
if (a==1) {
return[false,"error"];
}
else {
return[true];
}
}