2017-09-15 6 views
-3

Jquery-3.2.1でjqgrid 4.5.2バージョンを使用しています。前にjqgridのカスタムフォームのカスタムボタンにイベントを送信できません

jqgridでは、編集ボタン(追加、編集、削除)の代わりに、カスタム(追加、編集、削除)ボタンが実装されています。カスタムの追加/編集ボタンをクリックすると、カスタムフォームが開きます。以下は、カスタムボタンのonclickイベントです。

つまり、jqgridのデフォルトの編集/追加フォームを独自のカスタムフォームに置き換えました。以前は、jqgridのデフォルト(追加/編集)フォームで正常に動作していたbeforeSubmitイベントでいくつかの検証を書きました。今度は、置き換えられたカスタムフォームに同じ検証を適用したいと思います。

function(myGrid){ 
    myGrid.getGridParam('dataGrid').openEditFormIndicator(); 
}(myGrid) 

このカスタムフォームには、カスタム送信ボタンとキャンセルボタンがあります。今私はbeforeSubmitイベントをこの送信ボタンに追加したいと思います。フォームはカスタムなので、jqgrids default beforeSubmitイベントは機能しません。

フォームの追加/編集は、Javaで構築された独自のフレームワークによって行われます。フォームはjqgridから完全に独立しています。私はちょうどjqgrid行(ダブルクリックまたは編集ボタンをクリックして)からidを取得し、dbからデータを取り出して行編集フォームを作成するテンプレートに渡します。渡されたIDが空であるか、dbで見つからなかった場合、空の(追加)フォームが同じテンプレートで形成されます。

DataGrid.prototype.openEditFormIndicator = function() { 
var id = this.grid.getGridParam('selrow') 
if(!id) { 
    var gridId = this.grid.attr('id'); 
    var idSelector = "#alertmod_" + gridId; 
    $.jgrid.viewModal(idSelector, { 
     gbox: "#gbox_" + $.jgrid.jqID(gridId), 
     jqm: true 
    }); 
    $(idSelector).find(".ui-jqdialog-titlebar-close").focus(); 
} 
else { 
    //openInteractiveForm('form_plugin_examples',this.options.formIndicatorId,'id',id,'true'); 
    var encodedPkId = encodeURIComponent(id); 
    this.openFormIndicator('Id:' + encodedPkId + ',pkId:' + encodedPkId + ',Search:id%3A' + encodedPkId + ',IndicatorId:' + this.options.formIndicatorId + ',Debug:true' + ',FilterField:id,FilterValue:' + encodedPkId); 
    // TODO width, length, position 
} 
}; 

DataGrid.prototype.openFormIndicator = function(optionsStr) { 
    DialogBoxEdit.newWindow(this.options.formIndicatorId, optionsStr); 
}; 

上記の2つの機能を使用すると、追加/編集フォームがDialogBoxEditHandler.jsで形成されます。 jsはフォームを作成するために内部的にテンプレートを呼び出します。

作成されたフォームには、次の2つのボタンが含まれています。そのためには、前に投稿イベントを追加する必要があります。

<Button id="lnk-close" onclick="closeDialogBoxControl($(this).closest('form'));" class="btn-default">Close</Button> 
<Button id="lnk-submit" onclick="save_form_data($(this).closest('form'),true,'72');MD.ui.reloadGrid();" class="btn-primary ui-dialog-close">Save</Button> 
+2

この問題に関するヘルプが必要な場合は、コードを提供する必要があります。 –

+0

@AnteJablanAdamović:それは一般的な質問です。私が書いたコードには何の問題もありません。これは新しい実装であり、Googleのヘルプは見つかりませんでした。私の質問は、私が正確に必要なものを説明していると信じています。 – santoshM

+0

あなたのコードを見ることなく、beforeSubmitイベントをどのようにバインドしたかわからないので、私たちはあなたを助けることができません。 –

答えて

1

この質問を2回目にしたようです。 this is here

この場合、基本的にこのイベントを定義し、適切な配列を返す必要があります。あなたはこれを行うことができますのonclickイベントで定義されたカスタムボタンをクリックすると、リンクに提供されるヘルプの使用:我々はbeforeSubmitイベントを使用する場合は

... 
jQuery("#grid_id").jqGrid('editGridRow', rowid, { 
    ... 
    beforeSubmit : function(postdata, formid) { 
     if(someconditionOK) { 
      return [true,'']; 
     } else { 
      return [false,'Error submiting data']; 
     } 
    }, 
    ... 
}); 
+0

ありがとう@TonyTomov、今それは明らかです。私の場合はまったく別のケースです。フォームの追加/編集は、Javaで構築された独自のフレームワークによって構築されます。フォームはjqgridから完全に独立しています。私はちょうどjqgrid行からidを取得し、dbからデータを取り出して行編集フォームを作成するテンプレートに渡します。渡されたIDが空であるか、dbで見つからなかった場合、空のフォームが同じテンプレートで形成されます。適切な方法を見つけられず、jqgridでカスタムフォームをインライン化することが不可能だと感じました。だから、jsのonclickアクションでbeforeSubmitにバインドされた検証を書くことを計画しています。 – santoshM

+0

カスタムフォームを使用する場合、データを送信する前にカスタムイベントを使用する必要があります。 jqGridフォームの編集でビルドを使用することができます。上の私のコードで説明したような別の解決策を得るために私の答えで提供されるドキュメントを参照してください。 –

+0

ありがとう@TonyTomov、本当にごめんなさい、あなたの最後のコメントにラインを理解できません( "あなたはjqGridフォームの編集でビルドを使うことができます")。この問題は、jgGridの編集機能を使用していないこと、および上記のとおり、jqGridはデータのリスト作成にのみ使用されていることを要約したいと思います。今私が変更をサーバーに提出すると、jqGridは絶対に認識されません。 jqgridが行うのは、db上のデータを表示することだけです。 – santoshM

0

を、我々は、フォームの編集でビルドを使用する必要があります - 他のすべての場合にはイベントは機能しません - 簡単な言葉で、独自の編集フォームを使用する場合は、提出する前に自分のカスタムを書く必要があります。

関連する問題