2013-04-01 76 views
0

在内联编辑中,在编辑之前,它会在内部创建一个数组(savedRow)并填充可编辑字段的值,以便我可以访问这些值。jqGrid - 表单编辑问题

我想知道如果在表单编辑它有类似的东西,因为我需要访问字段的值之前编辑将完成进行验证之前,字段被“保存”在数据库。

有人可以帮助我吗?


编辑:

我在这里发布我的代码(一个字段的代码)的一部分,我想在方式(在线编辑和表单编辑)既验证。对于内联编辑我正在使用dataEvents进行验证,在那里我使用savedRow来访问尚未存储的数据。但是当我尝试使用表单编辑进行编辑时,由于使用了savedRow,它向我显示一个错误:savedRow is not defined。在这个领域的情况下,editrules符合我想要做的,但我不知道这是否会发生在所有这些领域。

{ name: 'ac_fd', index: 'ac_fd', width: 50, editable: true, 
    formatter: 'number', editrules: { number:true, required:true, minValue: 0.1, 
    maxValue: 1.0 }, formatoptions: { decimalPlaces: 1, decimalSeparator: '.'}, 
    editoptions: { 
     dataEvents: [ { 
      type: 'blur', fn: function(e) {       
       var savedrow = $("#list").getGridParam('savedRow'); 
       console.log($(this).val()); 
       if($(this).val() != savedrow[0]['ac_fd']) {   
       var eid='#' + savedrow[0]['id'] + '_ac_fd'; 
       var val_fd=$(this).val(); 
       var fd_min=0.1; 
       var fd_max=1.0; 

       if(isNaN(val_fd) || val_fd > fd_max || val_fd < fd_min) { 
         setTimeout(function(){ 
         $(eid).focus().select(); 
        },600); 


        $(eid).qtip({ 
         content: { 
          text: 'Fator de Demanda deve ser um <b>número</b> 
           entre <b>' + fd_min.toFixed(1) + '</b> e <b>' 
           + fd_max.toFixed(1) + '</b>.', 
          title: { 
          text: 'Atenção:', 
          button: true 
          } 
         }, 
         show: { 
          event: false, 

          ready: true, 

          effect: function() { 
          $(this).stop(0, 1).fadeIn(400); 
          }, 

          delay: 0, 
                }, 
         hide: { 
          event: false, 

          effect: function(api) { 
          $(this).stop(0, 1).fadeOut(900).queue(function() { 
           api.destroy(); 
          }); 
          }, 
         }, 
         style: { 
          classes: 'qtip-red qtip-rounded trif_tip_err', 
          tip: { 
          width: 10, 
          height:12 
          } 
         }, 
         position: { 
          my: 'bottom left', 
          at: 'top center', 
         }, 

         events: { 
          render: function(event, api) { 
          tip_timer.call(api.elements.tooltip, event); 
          } 
         } 
        }); 

       }  
       }   
      }   
     } ]    
    }     
    }, 

所以,如果dataEvents是常见的,用于三种形式的编辑,我在哪里可以做这种类型的验证(使用qtip过,我想,这个验证中联编辑使用​​过)?

回答

1

jqGrid在间隔savedRow参数中保存编辑行的原因是因为jqGrid 修改了原位编辑行。仅因为内嵌编辑和单元格编辑使用间隔savedRow参数。表单编辑不会修改网格的原始行,直到编辑完成。所以没有savedRow参数被用于表单编辑。

如果表单已关闭或者服务器响应中包含一些错误HTTP代码,则用户输入的新数据将不会保存在网格中。所以简单的服务器端验证通常就足够了。如果你想实现额外的客户端验证,你可以使用editrules功能。 Custom validation通常就足够了。它可以帮助验证表单的一个字段。如果在验证过程中需要比较多个表单字段(如果一个字段的值定义了另一个字段的有效值),则附加地使用beforeCheckValues回调。

已更新:在fn事件处理函数内部,您可以测试它是否将在表单编辑中调用。有很多方法可以做到这一点。例如,您可以测试$(e.target).closest(".FormGrid").length > 0。如果这是真的,那么这个事件就是在表单中。此外,重要的是要明白,当前编辑行是,直到成功保存在服务器上才能更改。因此,您可以使用任何时间getGridParam"selrow"选项来获取编辑行的编号,您可以使用getRowDatagetCell在修改开始之前从网格中获取数据(与savedrow相同)。

+0

感谢您的回复:) Hummm我认为表单编辑工作就像内嵌编辑,但现在我明白了。谢谢你,@ Oleg! :) – mailazs

+1

@mailazs:不客气! jqGrid的一个大问题是它包含许多代码重复或者很多关闭,但是不同的实现是相同的。内联编辑,单元格编辑和表单编辑仅具有部分常用功能,如'createEl','bindEv'和'checkValues'(来自[模块](https://github.com/tonytomov/jqGrid/blob/master/) js/grid.common.js)最主要的工作包含*在所有三种编辑模式下的不同实现* – Oleg

+0

Huuumm我认为他们可以考虑在所有三种模式下实现主要功能,比如在这种情况下......他们可能已经实现了一些东西,允许你在提交表单之前按字段验证它,这会非常有帮助:) 我在验证时遇到了一些麻烦,因为我使用'dataEvents'在内联编辑中进行了验证,而在'dataEvents'中我使用'savedRow',所以当我要使用表单编辑时,会产生一个问题:(你对我有一些建议吗? – mailazs