0

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

次に、colModelスニペット、カスタム関数、afterFormShow: function()およびAddモーダルフォームで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:(この方法で行う必要がある場合は、[編集]でも同様に使用できます)。

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。

(一部のコードスニペットは、承認とstackoverflowユーザー@Olegへの感謝を込めて再利用されました)

4

1 に答える 1

1

dataEventsを使用して、任意のイベントハンドラー(少し優れているfocusoutblurなど)を対応する入力コントロールにバインドすることをお勧めします。例については、古い回答を参照してください。

もう一つの発言。'ezyid'列には一意の値があるようです。したがって、列での使用を検討できkey: trueます。グリッド行のID(の<tr>要素の<table>)は、列の値とともに使用されます。IDでメタ文字を使用できる場合は、chkDuplicateEzyids関数をif ($('#' + value).length > 0) {/*duplicate are found*/}またはに減らすことができます。[編集]ダイアログ(詳細はこちらを参照)で列の非表示を実装し、[追加]フォームでのみ表示する必要がある唯一のもの。if ($('#' + $.jgrid.jqID(value)).length > 0) {/*duplicate are found*/}'ezyid'

于 2011-08-05T09:03:37.087 に答える