Jquery验证器:同时对同一个字段运行2个不同的验证

时间:2014-01-13 15:05:23

标签: jquery jquery-validate

我被困在一个场景中。我有一个字段文本2,这是必需的以及text3它应该加起来100%。问题是它会被私有地验证,但我希望验证能够一起显示。喜欢

  1. Text2是必需的

  2. Text2和Text3的总和必须等于100%

  3. 以下是我的代码

    <form action="" id="frmLogin" name="frmLogin" method="post">
     <input type="text" id="text1" name="text1" placeholder="text1">
     <input type="text" id="text2" name="text2" placeholder="text2">
     <input type="text" id="text3" name="text3" placeholder="text3">
     <input type="submit" id="submit" value="Submit" data-mini="true">
    </form>
    
    $('#frmLogin').validate({
    onfocusout: false,
    onkeyup: false,
    ignore: "",
    rules: {
        text1: {
            required: true
        },
        text2: {
            required: true,
            TotalSum: true
        }
    },
    showErrors: function (errorMap, errorList) {
        var messages = "";
        var check = 0;
        $.each(errorList, function (index, value) {
            check = 1;
            var id = $(value.element).attr('id');
            messages += (index + 1) + ". " + value.message + "\n";
        });
    
        messages = "Please correct following errors \n" + messages;
        if (check == 1) {
            alert(messages);
        }
    },
    submitHandler: function () {
        alert('Success!!!');
    },
    messages: {
        text1: {
            required: "Please enter text1"
        },
        text2: {
            required: "Please enter text2"
        }
    }
    });
    
    jQuery.validator.addMethod("TotalSum", function () {
    
    var arr = ['text2', 'text3'];
    var Sum = 0;
    for (var i = 0; i < arr.length; i++) {
        var test = arr[i];
        var sum2 = $('#' + test).val();
        if (sum2 == null || sum2 == 'NaN' || sum2 == '') sum2 = 0;
    
        Sum = parseInt(sum2) + parseInt(Sum);
    }
    if (Sum != 100) {
        return false;
    } else return true;
    }, "Sum of Text2 and Text3 must equal 100%");
    

    以下是同一FIDDLE

    的小提琴

1 个答案:

答案 0 :(得分:0)

我无法理解你的描述......你在谈论第2和第3场,但从未提及你的领域#1正在发生什么。无论如何,这个答案非常接近,因为它验证了两个字段,最多可以添加100个并将错误消息放在另一个位置。我相信你可以轻松调整它以满足你的需求。

工作演示:http://jsfiddle.net/B6N5f/

$(document).ready(function () {

    jQuery.validator.addMethod("TotalSum", function (value, element, params) {
        total = parseFloat(value) + parseFloat($(params[0]).val());
        return total == 100;
    }, "Total must add up to 100%!");

    $("#frmLogin").validate({
        rules: {
            text1: {
                required: true,
                TotalSum: ['#text2']
            },
            text2: {
                required: true,
                TotalSum: ['#text1']
            }
        },
        groups: {
            percent: "text1 text2"
        },
        errorPlacement: function (error, element) {
            error.insertAfter($('#submit'));
        }
    });

});