jQuery自定义验证,比较多个输入的序列

时间:2012-09-13 22:33:30

标签: javascript jquery validation

我正在使用jQuery validate插件来检查3个日期输入(例如)的序列是否按升序排列。我的方法是编写一个循环,比较从顶部到底部的输入日期(首先检查第1和第2,然后检查第2和第3)。

我的问题:

  1. 我需要多少次才能应用此验证规则?目前,我 将此规则应用于第一个输入。虽然,它检查是否或 不是我的3个输入顺序。始终显示错误消息 在第一个输入旁边。无论错误的位置如何。
  2. 我应该将函数修改为仅比较自身输入VS其后继者,并将除最后一个之外的所有输入应用它?
  3. 更新一个新问题......如果我回答问题2.我需要对必要的元素应用此验证规则n-1次(我也可以构建一个新类)。我的新问题是如何告诉jQuery应该比较哪两个日期(第一次检查日期1和日期2,第二次检查日期2和日期3)? DEMO

    HTML(包含三个日期输入的表格表格)

    <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
            }
        }
    })
    
    })​
    

1 个答案:

答案 0 :(得分:0)

我要做的是检查每个日期与其前任的对比。由于人们通常从上到下填写表格,因此当他们出现故障时,我认为对中的第二日期是错误的。但无论哪种方式都没问题。

您无需为.validate()来电中的每个日期设置明确的规则。如果为表单元素提供与验证方法匹配的类名,则将自动调用该方法。因此,除了最后或第一个date_aptN元素之外,只需提供类dateFormat