0

インライン編集では、編集を行う前に、内部的に配列 ( savedRow) を作成し、編集可能なフィールドの値を入力して、この値にアクセスできるようにします。

フィールドがデータベースに「保存」される前に、編集が完了する前にフィールドの値にアクセスして検証を行う必要があるため、フォーム編集でこれに似たものがあるかどうかを知りたいです。

誰かが私を助けることができますか?


編集済み:

ここにコードの一部 (1 つのフィールドのコード) を投稿し、両方の方法 (インライン編集とフォーム編集) で検証しようとしています。インライン編集では、 を使用して検証していますが、まだ保存されていないデータにアクセスするためにを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);
                          }
                       }
                    });  

                 }       
              }        
           }           
        } ]            
     }                   
  },

が一般的であり、3 つの形式の編集に使用される場合dataEvents、このタイプの検証をどこで行うことができますか (qtip も使用し、この検証をインライン編集でも使用したい)?

4

1 に答える 1

1

savedRowjqGrid が編集行を intervalパラメータに保存する理由は、jqGrid が編集行をインプレースで変更するためです。そのインライン編集とセル編集が intervalsavedRowパラメータを使用するためだけです。フォーム編集は、編集が完了するまでグリッドの元の行を変更しません。したがってsavedRow、フォーム編集ではパラメータは使用されません。

フォームが閉じている場合、またはサーバーの応答に何らかのエラー HTTP コードが含まれている場合、ユーザーが入力した新しいデータはグリッドに保存されません。そのため、通常は単純なサーバー側の検証で十分です。追加のクライアント側検証を実装する場合は、editrules機能を使用できます。通常、カスタム検証で十分です。フォームの 1 つのフィールドを検証するのに役立ちます。検証中にフォームの複数のフィールドを比較する必要がある場合 (1 つのフィールドの値が別のフィールドの有効な値を定義する場合)、さらにbeforeCheckValuesコールバックを使用します。

UPDATED :fnイベント ハンドラー内で、フォーム編集内で呼び出されるかどうかをテストできます。これを行うには多くの方法があります。たとえば、テストできます$(e.target).closest(".FormGrid").length > 0。true の場合、イベントはフォーム内にあります。さらに、現在編集中の行は、サーバーに正常に保存されるまで変更されないことを理解することが重要です。したがって、任意の時点getGridParam"selrow"オプションを使用して編集行の ID を取得したり、 または を使用して、変更が開始される前にグリッドからデータを取得しgetRowDataたりできますgetCell( と同じsavedrow)。

于 2013-04-01T15:18:32.347 に答える