Проверка двух связанных полей с помощью jQuery Validator - PullRequest
0 голосов
/ 18 января 2012

У меня есть два элемента: часы и минуты.Если одно или оба поля оставлены пустыми, мне нужна ошибка, чтобы появиться.Я использовал функцию errorPlacement для размещения только одной ошибки, но когда вы исправляете это одно поле, ошибка исчезает, но другое поле по-прежнему недействительно.всегда возникают проблемы, при которых отображаются обе ошибки, или нет ошибок и т. д.

Кто-нибудь сталкивался с этой проблемой раньше?Или кто-нибудь знает способ правильно выявлять и обрабатывать ошибки?

Заранее спасибо.

1 Ответ

1 голос
/ 18 января 2012

Я не уверен, какое поле является обязательным в вашем примере, но вы, возможно, ищете выражение зависимости для проверки jquery. Например, если вы хотите, чтобы минуты требовались только при наличии значения часов, вы должны настроить проверку следующим образом:

rules: {
    minutes: {
      required: "#hours:filled"
    }
}

Если это не ваша логика, вам, скорее всего, придется создать собственный метод проверки. Это логика, которую вы имели в виду?

Для справки:

Выражение зависимости проверки jQuery

Edit:

Вот пользовательский валидатор:

jQuery.validator.addMethod("hoursMinutes", function (value, element, param) {
    return $("#hours").val() != "" && $("#minutes").val() != "";
}, "Please enter both hours and minutes.");

validator.settings.rules = {
    hours: { hoursMinutes: true }
}

При этом отобразится только 1 сообщение об ошибке.

Редактировать # 2:

Попробуйте это.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title></title>
    <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
    <script type="text/javascript" src="http://ajax.aspnetcdn.com/ajax/jquery.validate/1.9/jquery.validate.min.js"></script>
    <script type="text/javascript">
        $(document).ready(function () {

            var validator = $("#form1").validate({
                highlight: function (element, errorClass) {
                    $(element).addClass("invalid");
                },
                unhighlight: function (element, errorClass) {
                    $(element).removeClass("invalid");
                },
                groups: { time: "hours minutes" },
                errorPlacement: function (error, element) {
                    $("#errors").append(error);
                },
                messages: {
                    hours: { required: "Please enter both hours and minutes." },
                    minutes: { required: "Please enter both hours and minutes." }
                },
                showErrors: function (errorMap, errorList) {
                    this.defaultShowErrors();

                    if ($("#hours:filled, #minutes:filled").length == 2) {
                        $("#errors label").hide();
                    }
                    else {
                        $("#errors label").show();
                    }
                }
            });

            $("#submitBtn").click(function () {
                if ($("#form1").valid()) {
                    alert("valid");
                }

                return false;
            });
        });
    </script>
    <style type="text/css">
        .invalid
        {
            border: solid 1px red;
        }
    </style>
</head>
<body>
    <form id="form1" action="" method="post">
    <div id="errors">
    </div>
    <input id="hours" name="hours" type="text" class="required" />
    <input id="minutes" name="minutes" type="text" class="required" />
    <button id="submitBtn">
        Go</button>
    </form>
</body>
</html>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...