0

jQuery検証プラグインを使用して、3つの日付入力のシーケンス(たとえば)が昇順であるかどうかを確認しています。私のアプローチは、入力日付を上から下に比較するループを作成することです (最初に 1 番目と 2 番目をチェックし、次に 2 番目と 3 番目をチェックします)。

私の質問:

  1. この検証ルールを何回適用する必要がありますか? 現在、このルールを最初の入力に適用しています。ただし、3つの入力が連続しているかどうかを確認しました。エラー メッセージは常に最初の入力の横に表示されていました。エラーの場所は問いません。
  2. 関数を変更して、それ自体の入力と後続の入力のみを比較し、最後の入力を除くすべての入力に適用する必要がありますか?

更新新しい質問... 質問 2 を使用すると、必要な要素に対してこの検証規則を n-1 回適用する必要があります (新しいクラスを作成することもできます)。私の新しい質問は、どの2つの日付を比較する必要があるかをjQueryにどのように伝えるかです(最初に日付1と日付2をチェックし、2回目に日付2と日付3をチェックします)? デモ

HTML (日付を 3 つ入力するテーブル フォーム)

<form id="form1"><table><tr class = "app_dates"><th><label for = "id_Date_apt"> Application Date 1 (MM/DD): </label></th> <td> <input id = "id_Date_apt" type = "text" value = "01/11" name = "Date_apt"/></td></tr>
<tr class = "app_dates"><th><label for = "id_Date_apt"> Application Date 2 (MM/DD): </label></th> <td> <input id = "id_Date_apt2" type = "text" value = "12/12" name = "Date_apt2"/></td></tr>
<tr class = "app_dates"><th><label for = "id_Date_apt"> Application Date 3 (MM/DD): </label></th> <td> <input id = "id_Date_apt3" type = "text" value = "03/13" name = "Date_apt3"/></td></tr>
<tr><td><input type="submit" value="Submit"><input type="reset" value="Reset"></td></tr></table></form>

JS

$(document).ready(function() {
    //create a function used compare the sequence of input values
    function isDate() {
    var siz = $('input[id^="id_Date_"]').size()
    date = []
    temp_f = 0

// this for loop compares the secquences of application dates in pairs    
    for (var i = 0; i < siz - 1; i++) {
        j = i + 1
        var date1_m = parseFloat($('input[id^="id_Date_apt"]:eq(' + i + ')').val().slice(0, 2))
        var date2_m = parseFloat($('input[id^="id_Date_apt"]:eq(' + j + ')').val().slice(0, 2))
        var date1_d = parseFloat($('input[id^="id_Date_apt"]:eq(' + i + ')').val().slice(3, 5))
        var date2_d = parseFloat($('input[id^="id_Date_apt"]:eq(' + j + ')').val().slice(3, 5))
        var date1_full = new Date(1960, date1_m - 01, date1_d)
        var date2_full = new Date(1960, date2_m - 01, date2_d)

        if (date1_full > date2_full) {
            temp = 0
        }
        else {
            temp = 1
        }
        temp_f = temp_f + temp
    } //end of for loop

    if (temp_f != siz-1) {
        return false;
    }
    else {
        return true;
    }
}

//validation////
$.validator.addMethod("dateFormat", function(value, element) {
    return isDate();
}, "Inputs are not in sequence");

$("#form1").validate({
    submitHandler: function(form) {
        SubmittingForm()
    },
    rules: {
        //should I add the validation rule for Date_apt2 and Date_apt3??    
        Date_apt: {
            dateFormat: true
        }
    }
})

})​

</p>

4

1 に答える 1

0

私がすることは、各日付をその前の日付と照合することです。人々は通常、フォームに上から下に記入するので、順序が狂っている場合、ペアの2 番目の日付は間違っていると思います。でもどっちでもいいです。

.validate()通話の日付ごとに明示的なルールを設定する必要はありません。フォーム要素に検証メソッドと一致するクラス名を指定すると、そのメソッドが自動的に呼び出されます。date_aptNしたがって、最後の要素または最初の要素を除くすべての要素に classを与えるだけdateFormatです。

于 2012-09-13T23:51:55.660 に答える