Как включить метку поля в сообщение об ошибке проверки jquery - PullRequest
4 голосов
/ 20 февраля 2011

Я показываю свои ошибки проверки jquery в верхней части страницы. Я хочу включить текстовое значение метки, связанной с каждым недопустимым полем, рядом с каждым сообщением. Как это сделано? Вот мой JQuery.

$(document).ready(function(){
    $("#reqAccount").validate({
            errorClass: "error-text",
            validClass: "valid",
            errorLabelContainer: "#errorList",
            wrapper: "li ",
            highlight: function(element, errorClass, validClass) {
                $(element).addClass("error-input").addClass(errorClass).removeClass(validClass);
             },
             unhighlight: function(element, errorClass, validClass) {
                $(element).removeClass("error-input").removeClass(errorClass).addClass(validClass);
             }
        });
    });

Ответы [ 4 ]

3 голосов
/ 20 февраля 2011

Вот как я в итоге обновил сообщения, чтобы включить текстовое значение метки.Идентификаторы текстового поля были найдены в карте ошибок, поэтому я использовал их, чтобы найти метку с похожим идентификатором и добавил их в список ошибок.Пожалуйста, прокомментируйте, если есть лучший способ сделать это.

  $(document).ready(function(){
    $("#reqAccount").validate({
        errorClass: "error-text",
        validClass: "valid",
        errorLabelContainer: "#errorList",
        wrapper: "li class='indent error-text'",
        showErrors: function(errorMap, errorList) {
            var i = 0;
            var labelText = new Array(this.numberOfInvalids());
            $.each(errorMap, function(name, value) {
                labelText[i] = $("#" + name + "Label").text();
                i++;
            });
            i = 0;
            $.each(errorList, function(name, value) {
                this.message = labelText[i] + " " + this.message;
                i++;
        });
            this.defaultShowErrors();

         },

        highlight: function(element, errorClass, validClass) {
            $(element).addClass("error-input").addClass(errorClass).removeClass(validClass);
         },
         unhighlight: function(element, errorClass, validClass) {
            $(element).removeClass("error-input").removeClass(errorClass).addClass(validClass);
         }
    });
});
3 голосов
/ 20 февраля 2011

Если я вас правильно понимаю, я думаю, вы могли бы использовать showErrors:

$(".selector").validate({
   showErrors: function(errorMap, errorList) {
      //use the fn params to get a map of current errors,
      //then append to your <li> elements
   }
});

Ref. http://docs.jquery.com/Plugins/Validation/validate на вкладке "Параметры".

2 голосов
/ 27 июня 2013

Кодер, спасибо за ответ, который вы опубликовали, код showErrors, который вы опубликовали, мне очень помог. Тем не менее, я не смог заставить его работать на меня, если для onfocusout установлено значение true. Мне пришлось немного изменить ваш код, и, надеюсь, это поможет всем, кто имеет дело с этой же проблемой.

showErrors: function(errorMap, errorList) {
                var i = 0;
                var labelText = new Array(this.numberOfInvalids());

                $.each(errorMap, function(name, value) {
                    //I had to change the following line to get the for attribute of the 
                    //label that matches the id of the name
                    var label = $("label[for='" + $('#' + name).attr('id') + "']").text();
                    labelText[i] = label;
                    i++;
                 });
                i = 0;
                $.each(errorList, function(name, value) {
                    //This is where I ran into issues.  With the code you had earlier, the labelText kept
                    //getting appended every time I would change focus from an input.  To get rid of that
                    //I had to run a couple of checks
                    var semi = labelText[i].indexOf(':');
                    var requiredString = 'This field is required';
                    var check = labelText[i].indexOf(requiredString); 

                    if (check != -1) {
                        if (semi != -1 && labelText[i].indexOf(':', semi + 1) != -1) {
                            var indexOfSemi = labelText[i].indexOf(':'); 
                            labelText[i] = labelText[i].substr(0, indexOfSemi); console.log(labelText[i]);
                            this.message = hold + ": " + this.message;
                        }
                    } else {
                        this.message = labelText[i] + " " + this.message;d
                        i++;
                    }
                });
                this.defaultShowErrors();
            },

Просто хотел сказать спасибо, и, надеюсь, это поможет кому-то еще.

1 голос
/ 21 ноября 2014
$.validator.messages.required = function (param, input) {
     return 'The ' + $("label[for='"+ input.name +"'].lblRequired").text()
     + ' field is required';
}

Я использую это, и оно прекрасно работает для меня. Когда вы выбираете соответствующую метку с помощью jQuery, обязательно добавьте дополнительный идентификатор к вашей метке (в моем случае я добавил класс ".lblRequired"). Когда запускается валидатор, он создает новые метки с тем же «for», который связывает их с входами. Поэтому, если вы не добавите класс или другой способ идентификации своих исходных меток, вы получите беспорядок, поскольку вы выберете неправильную метку для последующих проверок, и метки будут продолжать соединяться с сообщениями об ошибках.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...