自定义函数仅适用于编辑模式,不适用于 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 支持带有选项 valuenameiCol 的旧样式 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 === -1options.oldValue === nulloptions.rowid === "_empty"。建议使用 options.mode 来检测免费 jqGrid 中的编辑(或搜索模式),因为其他属性(iRowoldValuerowid)的值取决于编辑模式。

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];
 }
}