2011-08-05 27 views
0

colModelには、custom_func: myFunc()があります。これは、jqGridネイティブのAddまたはEditモーダルフォームのテキストフィールドに入力された整数値が、グリッド内に表示されているいくつかの行ですでに使用されていないかどうかをテストします(loadonce:true)。モーダルフォームの[送信]ボタンをクリックするまで、custom_func:の方法は実行されませんが、フォーカスアウト(またはぼかし)のときにモーダルフォームのテキストフィールドをテストしたいと思います。これを行う方法はありますか?私はafterShowForm:オプションでそれを表示しようとしましたが、それは動作しますが、エラーメッセージと停止は、送信ボタンがクリックされたときと同じではなく、custom_func: myFunc()からフォーカスアウト/ブラーを行う方法はありますか?jqGrid custom_funcのモーダルフォームでテキストフィールドにfocusoutを使用するには?

次に、colModelスニペットのあとにカスタム関数とそれに続く私の試みで、modoutフォームのafterFormShow: function()でfocusoutを使用しようとしています。

//colModel 
...}, 
{name: 'ezyid', index: 'ezyid', width: 60, align: "center", editable: true, 
     formoptions: { rowpos: 1, 
      colpos: 1, 
      label: "Ezy ID", 
      elmprefix: "(*) " 
      }, 
editrules: { 
      custom: true, 
      custom_func: chkDuplicateEzyids, //custom function 
      required: true 
      } 
     },    

colModelカスタム関数:
function chkDuplicateEzyids(value, colname) { 

var isFound = false; 

var rows = grid.jqGrid('getRowData'); 

for (var i = 0; i < rows.length; i++) { 

    var row = rows[i]; 

    if (value == row.ezyid && value != '') { isFound = true }; 

} 

if(isFound){ 

    return [false, "This Ezy ID is in use, please enter another or press Cancel."]; 

} else { 

    return [true, ""]; 

} 

} 

マイそれが持っていた場合は、編集中に同様の使用であろう(モーダルフォームのオプションを追加する afterShowForm:オプションからアクセスするカスタム関数を使用するのに理想的な試み未満すぐにではなく、他のすべての中で入力することよりも、テキストフィールドの値をテストするために)私はfocusout使用(またはぼかしたいのですが、要約すると

addSettings = { 
recreateForm: true, 
jqModal: false, 
reloadAfterSubmit: false, 
closeOnEscape: true, 
closeAfterAdd: true, 
afterShowForm: function ($form) { 
    var form = $form.parent()[0]; 

    $("#ezyid", form).blur(function() { //or focusout() if better 

     var resp = chkDuplicateEzyids($(this).val(), 'Ezy ID'); 

     if (!resp[0]) { 
      $("#FormError", form).show(); 
      $(".ui-state-error", form).html(resp[1]); 
     } 
    }); 

    $("#lui_" + grid[0].id).hide(); 
}, 
onclickSubmit: onclickSubmitLocal 
}, 

:この方法を)行うことにします送信ボタンに到達するフォームの値は、値がすでに使用中であることを検出するためにのみ使用されます。これは一般的な習慣のようですが、私はこの文脈でそれを理解することはできません。多くのTIA。

答えて

1

は、私はあなたがblurとして少し良くなるように(任意のイベントハンドラをバインドするfocusoutdataEventsを使用することをお勧めします

(ユーザー@OlegをStackOverflowのために承認によってと感謝して再利用するいくつかのコードスニペット(S)) )を対応する入力コントロールに入力します。例については、the old answerを参照してください。

もう1つの発言。 'ezyid'列にはというユニークな値があるようです。したがって、列にkey: trueを使用することを検討することができます。この場合、グリッド行のID(<tr>要素の場合は<table>)が列の値と共に使用されます。この場合、chkDuplicateEzyidsの機能は、if ($('#' + value).length > 0) {/*duplicate are found*/}またはif ($('#' + $.jgrid.jqID(value)).length > 0) {/*duplicate are found*/}に減らすことができます。meta-charactersをIDに使用することができます。編集ダイアログ(hereを参照)に'ezyid'列の非表示を実装する必要がある唯一のもので、「追加」フォームにのみ表示します。

+0

ありがとう@Olegは、今私が望むように動作します。これらのクライアント側のコンセプトの中には、学習曲線が険しいものがあります。答えを見つけるのに十分なグレーの領域を少し残しておき、理解がより良いとわかった場合は好きです。私はかなりの間、従来のASPと.NETのサーバー側のアプリケーションを開発しましたが、このクライアントのUIスクリプティングの考え方をやり直す必要があります。私は明日私の問題を解決したコードを投稿します。再度、感謝します。 –

+1

パースのジェリー:私はあなたを助けることができてうれしいです。どういたしまして!私はC/C++やC#のようなもっと古典的な言語の使用の後にJavaScriptを使い始めたので、3年前に同じ問題を抱えていました。だから私はあなたの問題をよく理解しています。 – Oleg

関連する問題