インライン編集と、[追加]ボタンを使用して新しいレコードを作成するときにjqGridを使用しています。
簡単にするために、2つのフィールドがあるとしましょう
Field1 Field2
次のルールが必要です
- ユーザーがField1またはField2に何も入力しない場合、必要に応じて検証は行われません
- ユーザーがデータを入力する場合、フィールド1またはフィールド2のいずれかにデータを入力できますが、両方に入力することはできません
インライン編集と、[追加]ボタンを使用して新しいレコードを作成するときにjqGridを使用しています。
簡単にするために、2つのフィールドがあるとしましょう
Field1 Field2
次のルールが必要です
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}},
...
]
...
});
編集前または編集後(またはその他のコールバック)にfield1
、field2
変数を値にリセットすることを忘れないでください。undefined
oneditfunc
aftersavefunc
上記のコードでは、フィールドの順序が変更された場合にコードが機能するように、「対称」バージョンfield1
と検証を使用しました。これは、 columnChooserを使用する場合に重要になる可能性があります。の前に常に検証されるかどうかを確認できない場合。field2
field1
field2
既存のjqGridメソッドの「サブクラス化」を使用してアーカイブできるいくつかの追加の効果。例として答えを参照してください。
更新:デモは、検証に関する上記の考え方をより詳細に示しています。