【问题标题】:jqgrid different editrules for when adding and editingjqgrid添加和编辑时的不同编辑规则
【发布时间】:2011-05-23 09:05:32
【问题描述】:

我有一个用于编辑用户(权限、名称等)的网格。
我还有一个密码字段,在编辑模式下,它是只写的。
含义 - 不显示密码,但如果用户为此字段插入值 - 则密码已更改。
我的问题是,在编辑现有用户时,我显然希望密码字段是可选的。但是在添加新用户时,我想将此字段设为必填。
如何实现?
谢谢

【问题讨论】:

    标签: jquery jqgrid


    【解决方案1】:

    我为此使用方法“setColProp”

    ......
    { //Edit dialog options
    beforeCheckValues: function(postdata, formid, mode) {
      grid.setColProp('Password', {editrules: {required: false}}); 
    },
    { //Add dialog options
    beforeCheckValues: function(postdata, formid, mode) {
      grid.setColProp('Password', {editrules: {required: true}}); 
    }
    

    【讨论】:

      【解决方案2】:

      对于您的问题,您可以在编辑和添加时使用不同的验证方法。

      示例:

      function validate_add(posdata, obj)
      {
         if(posdata.PASSWORD==null || posdata.PASSWORD=="" || posdata.PASSWORD==undefined)
          return [false, "Please enter the pasword"];

      返回 [true, ""]; }

      函数 validate_edit(posdata, obj) { //你可以忽略这个,因为你不想验证密码 }

      //在jqgrid中

      grid.navGrid('#pager',{add:true,addtext:'Add',edit:true,edittext:'Edit',del:true,deltext:'Del', search:true,searchtext:' Find',refresh:true}, //选项 {width:700,reloadAfterSubmit:true, beforeSubmit:validate_edit}, // 编辑选项 {width:700,reloadAfterSubmit:true, beforeSubmit:validate_add}, // 添加选项 {}, //删除选项 {} //搜索选项 );

      【讨论】:

      • 你是对的,beforeSubmit 可以用于自定义验证。所以我+1。在您的回答被接受后,我将发布另一种方式的描述:如何使用 标准验证editrules,但 两个不同的 editrules 值用于添加和编辑对话框。
      • 恐怕你不能用 editrules 来做到这一点,因为 editrules 在 common_rules 模块下,这对于添加和编辑来说都很常见......它会如果你能做到,那就太好了……
      • @Sandeep:没有办法定义不同的editrules,但可以更改内部editrules对象的值例如beforeCheckValues 方法或在验证检查之前调用的其他一些form edit events 内部。
      • hmmm 实际上我很困惑...你能把这个替代品作为答案发布吗...谢谢..
      【解决方案3】:

      Sandeep 发布了正确的代码,因为 beforeSubmit 可用于自定义验证。

      有其他方法可以做你想做的事。无法定义不同的editrules,但可以更改例如 beforeCheckValues 方法内的 editrules 对象的值,或者在称为 before 的其他 form edit events 内的对象的值em> 验证检查。

      这是可以更改editrules的代码架构:

      var grid = $("#list"),
          getColumnIndexByName = function(columnName) {
              var cm = grid.jqGrid('getGridParam','colModel'), // grid[0].p.colModel
                  i=0, l=cm.length;
              for (; i<l; i++) {
                  if (cm[i].name===columnName) {
                      return i; // return the index
                  }
              }
              return -1;
          },
          addEditrulesPassword={required:true /*some other settings can follow*/},
          editEditrulesPassword={required:false /*some other settings can follow*/};
      
      // ... first of all we define the grid 
      grid.jqGrid({
          // all parameters including the definition of the column
          // with the name 'Password' inside of `colModel`
      });
      
      grid.jqGrid(
          'navGrid','#pager',{/*navGrid options*/},
          {//Edit dialog options
          },
          {//Add dialog options
              beforeCheckValues:function(postdata,$form,oper) {
                  // get reference to the item of colModel which correspond
                  // to the column 'Password' which we want to change
                  var cm = grid[0].p.colModel[getColumnIndexByName('Password')];
                  cm.editrules = addEditrulesPassword;
              },
              onclickSubmit:function(ge,postdata) {
                  // get reference to the item of colModel which correspond
                  // to the column 'Password' which we want to change
                  var cm = grid[0].p.colModel[getColumnIndexByName('Password')];
                  cm.editrules = editEditrulesPassword;
              }
          }
      );
      

      【讨论】:

        【解决方案4】:

        我发现内联编辑的解决方案有点脏:

        function inlineCustomValidation(value, colname) {
        
                var savedRow = jQuery("#grid").getGridParam("savedRow");
        
                if (savedRow[0].some_required_field == "")
        
                    //add operation validation
        
                } else {
        
                   //edit operation validation
        
                }
            };
        

        savedRow 数组。这是一个只读属性,在内联和单元格编辑模块中用于在编辑行或单元格之前存储数据。请参阅单元格编辑和内联编辑。

        【讨论】:

          【解决方案5】:

          以下脚本用于验证 jqgrid 内联编辑单元格,它不允许用户输入除用于指定小数点分隔符的点(.)以外的任何特殊字符

          { name: 'Amount', width: 22, label: 'Cost', editable: true, align: "right", sorttype: 'int', search: false, formatter: 'currency', formatoptions: { prefix: "$", thousandsSeparator: ",", decimalPlaces: 2, defaultValue: '0.00' },
                      editoptions: {
                          dataInit: function(element) {
                              $(element).keypress(function (e) {
                                  if (e.which != 8 && e.which != 0 && e.which != 46 && (e.which < 48 || e.which > 57 )) {
                                      return false;
                                  }
                              });
                          }
                      }
                  },
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2012-07-29
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多