あなたの質問は、私もしばらく理解しようとしてきたものです。これは私がこれまでに持っているものです。
これを使用して、単一の日付範囲を検証します。入力フィールドを日付ではなくパラメーターとして受け取ります。
jQuery.validator.addMethod("rangeDate", function(value, element, params) {
try {
var beforedate=$.datepicker.parseDate($(params[0]).datepicker('option','dateFormat'),$(params[0]).val());
var afterdate=$.datepicker.parseDate($(params[1]).datepicker('option','dateFormat'),$(params[1]).val());
var qdate=$.datepicker.parseDate($(element).datepicker('option','dateFormat'),value);
return this.optional(element) || (qdate >= beforedate && qdate<=afterdate);
} catch(err){
return false;
}
}, function(params){
return "Date must occur between " + $(params[0]).val() + ' and ' + $(params[1]).val();
}
);
ルールは次のようになります。
rules:{
between_date: { dateCan: true,
rangeDate: {
depends: function(element) { //check that params exist
return $("input[name='before_date']").valid()
&& $("input[name='after_date']").valid();
},
param: ["input[name='before_date']", "input[name='after_date']"]
}
}
}
rangeDate
少し実験した後、1 つのフィールドに複数のルールを設定できることがわかりました。ただし、最後の呼び出しrangeDate
は、そのフィールドに対する以前のすべての呼び出しの結果を上書きするように見えます。したがって、フィードできるフィールドのペアの配列を受け入れる別のカスタムルールを追加することがうまくいくと思いますrangeDate
。このアプローチの問題は、より多くの日付のペアを取得するにつれてdepends
、ルールの句が扱いにくくなることです。rangeDate
これは、すべてのペアではなく少なくとも 1 つのペアのみが必要な場合に特に当てはまります。
もちろん、日付範囲が動的でない場合は、depends
句が必要ないため、問題はより簡単になります。rangeDate
フィールドではなく日付を受け入れるように書き直して、日付のペアの配列を受け入れるようにラッパー ルールを記述します。
問題の解決策が見つかった場合は、ぜひご覧ください。うまくいけば、それは私のものよりもエレガントになります。