最近のプロジェクトでは、フォーム検証では、開始時間と終了範囲に関する判断が必要です。終了時間は開始時間以上でなければなりません。つまり、終了年は初年度よりも大きい場合は、開始月を等しい場合は、日付を比較してください。次に、検証ごとに、次の関数を使用して比較できます。
関数の比較(begin、end、error){
var begin = parseint(begin、10);
var end = parseint(end、10);
var diff = end- begin;
if(diff <0){
アラート(エラー);
}それ以外{
trueを返します。
}
}
このようにして、検証の場合、結果が真実である限り、それは通過することを意味します。のように:
var year = Compare(2001,2003、 'year');
var month = Compare(1,2、 'month');
var day =比較(12,13、 'day');
アラート(年&&月&& day);
開始および終了時を変更し、上記の日付を開始および終了します。のように:
var year = Compare(2001,2003、 'year');
var month = Compare(3,2、 'month');
var day =比較(24,13、 'day');
アラート(年&& day);
実行結果は、「月」、「false」という順序で表示されます合格します。日の検証の前提条件は、その月検証が渡されることです。慎重な分析の後、上記の関数の3つのパラメーターをモノリシックモード、つまり以下に保存することにしました。
{
開始:2001年、
終了:2003年、
エラー:「終了期間は開始期間より大きくなければなりません」
}
ただし、関数のパラメーターを定義したくありません。答えはイエスです。関数の開始時に、最初にパラメーターの数を決定します。再帰処理を行う方法は?私は関数内で次のことをしました:
var len = arguments.length;
if(len> 1){
var args = array.prototype.slice.call(arguments);
args.shift();
}
引数の場合、array.shift()メソッドを直接呼び出すことはできません。引数には長さの属性がありますが、結局は配列ではないため、array.slice()メソッドを使用して配列に変換します。議論に関しては、オンラインでそれについてもっと知ることができますので、ここでは詳しく説明しません。レンが1より大きい場合にのみ、なぜ処理されるのですか?パラメーターが1の場合、次の検証ステップを実行する必要がないためです。再帰処理はいつ実行されますか?慎重に考えると、初期値が最終値に等しい場合にのみ必要です。
var diff = parseint(arguments [0] .end、10)-parseint(arguments [0] .begin、10);
if(diff <0){
アラート(引数[0] .Error);
falseを返します。
} else if(diff == 0){
return> 1?callee.apply(this、args):true;
}それ以外{
trueを返します。
}
上記のコードでは、calleeは機能自体です。
検証関数は完了しましたが、次のことに注意する必要があります。
パラメーターの数は決定されませんが、前のパラメーターの検証結果が次のパラメーターの検証が継続するかどうかを決定するため、パラメーターの順序は依然として重要です。
parseint()関数の2番目のパラメーター10は無視しないでください。無視された場合、0から始まる値(07、08など)に遭遇すると、Octalで処理されます。
ここにあります、 例を見てください。アラートモードでエラーメッセージを表示したくない場合があります。ハンドラーをカスタマイズして、最後のパラメーターとして渡すことができます。次に、関数の開始時に、次のような処理関数を取得します。
var func = arguments [len -1];
if(typeof func == 'function'){
FUNC(引数[0]);
}
したがって、最終処理関数は次のようなものです。
function compare(){
var len = arguments.length;
var func = arguments [len -1];
if(len> 1){
var args = array.prototype.slice.call(arguments);
args.shift();
}
var diff = parseint(arguments [0] .end、10)-parseint(arguments [0] .begin、10);
if(diff <0){
(typeof func == 'function')?
falseを返します。
} else if(diff == 0){
return> 1?callee.apply(this、args):true;
}それ以外{
trueを返します。
}
}
function compare(){
var len = arguments.length;
if(len> 1){
var args = array.prototype.slice.call(arguments);
args.shift();
}
var diff = parseint(arguments [0] .end、10)-parseint(arguments [0] .begin、10);
if(diff <0){
アラート(引数[0] .Error);
falseを返します。
} else if(diff == 0){
return> 1?callee.apply(this、args):true;
}それ以外{
trueを返します。
}
}