1

インライン編集と、[追加]ボタンを使用して新しいレコードを作成するときにjqGridを使用しています。

簡単にするために、2つのフィールドがあるとしましょう

Field1   Field2

次のルールが必要です

  • ユーザーがField1またはField2に何も入力しない場合、必要に応じて検証は行われません
  • ユーザーがデータを入力する場合、フィールド1またはフィールド2のいずれかにデータを入力できますが、両方に入力することはできません
4

1 に答える 1

5

jqGridの検証の可能性には、特にインライン編集中の検証に多くの制限があります。$.jgrid.checkValues検証を実装するメソッドが呼び出され(ソースコードの行を参照)、対応する入力フィールドの読み取り中に直接呼び出されます。したがって、現在の検証として他のフィールドに関する情報はありません。

回避策として、フィールド検証中にField1から値を保存できます。Filed2の検証では、両方のフィールドの検証を行うことができます。カスタム検証は、ケースで使用できる方法です。

var field1, field2,
    myCustomCheck = function (value, colname) {
        if (colname === "field1") {
            field1 = value;
        } else if (colname === "field2") {
            field2 = value;
        }

        if (field1 !== undefined && field2 !== undefined) {
            // validate the fields here
            return [false, "some error text"];
        } else {
            return [true];
        }
    };

$("#grid").jqGrid({
    ...
    colModel: [ 
        ... 
        {name: 'field1', editable: true, ...,
            editrules: {custom: true, custom_func: myCustomCheck}},
        ...
        {name: 'field2', editable: true, ...,
            editrules: {custom: true, custom_func: myCustomCheck}},
        ...
    ]
    ...
});

編集前または編集後(またはその他のコールバック)にfield1field2変数を値にリセットすることを忘れないでください。undefinedoneditfuncaftersavefunc

上記のコードでは、フィールドの順序が変更された場合にコードが機能するように、「対称」バージョンfield1と検証を使用しました。これは、 columnChooserを使用する場合に重要になる可能性があります。の前に常に検証されるかどうかを確認できない場合。field2field1field2

既存のjqGridメソッドの「サブクラス化」を使用してアーカイブできるいくつかの追加の効果。例として答えを参照してください。

更新デモは、検証に関する上記の考え方をより詳細に示しています。

于 2012-09-13T08:43:49.387 に答える