代码之家  ›  专栏  ›  技术社区  ›  Chakra

自定义功能仅用于jqGrid中的编辑模式,而不是添加模式

  •  1
  • Chakra  · 技术社区  · 8 年前

    我有一个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;
                        }
                    }
                },
    
    2 回复  |  直到 8 年前
        1
  •  1
  •   Oleg    8 年前

    Free jqGrid支持旧样式 custom_func 带有选项 value , name iCol 新风格 验证。要使用新样式验证,无需指定任何 自定义_功能 回调,但要定义 custom 作为calback函数,具有一个参数:

    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 )取决于编辑模式。

        2
  •  0
  •   PowerStat    5 年前

    对于4.7版,我使用这种方法。用于为表添加数据类的表单。然后,执行用户验证的特殊操作。

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