Как остановить пользовательскую функцию jQuery.validate.errorPlacement, отображающую несколько сообщений об ошибках? - PullRequest
1 голос
/ 30 ноября 2010

Я использую jQuery.validate (с ASP.NET MVC 1.0 и xVal) и пытаюсь переопределить код отображения ошибок по умолчанию, чтобы вместо добавления диапазона ошибок к элементу добавлялся значок изображения ошибки с ошибкойсамо сообщение в атрибутах title / alt изображения.

Я звоню по этому поводу из заголовка моей страницы:

jQuery.validator.setDefaults({
  errorPlacement: function(error, element) {
    var errorTag = '<img src="error.png" title="' + error.html() + '" />';
    var errorImg = $(errorTag);
    errorImg.insertAfter(element);
  }
});

Кажется, все работает нормально - правильные значки в нужном месте -но затем каждый раз, когда вызывается validate (), он добавляет ДРУГОЙ значок проверки в поле, так что вы очень быстро получаете десятки значков ошибок рядом с каждым входом ...

Я явно пропускаю какой-то атрибутэто сообщит плагину validate, что в этом поле уже есть ошибка, но я не могу понять, что - я попытался добавить атрибут htmlfor = element.Id, я попытался добавить класс field-validation-error, но я никуда не денусь, и теперь я застрял

Спасибо,

-D-

Ответы [ 3 ]

3 голосов
/ 05 августа 2011

Вы должны проверить, существует ли он:

jQuery.validator.setDefaults({
  errorPlacement: function(error, element) {
    var errorTag = '<img src="error.png" id="myTag" title="' + error.html() + '" />';
    var errorImg = $(errorTag);

    if ($('#myTag').length == 0) {
      errorImg.insertAfter(element);
    }
  }
});
0 голосов
/ 24 августа 2011

Я разместил сообщение в блоге здесь , в котором объясняется, как выполнить эту процедуру от начала до конца для проверки как на стороне клиента, так и на стороне сервера с использованием проверки jQuery.Надеюсь, это поможет!

0 голосов
/ 01 декабря 2010

Проблема в том, что jQuery.validate использует элемент error, чтобы определить, была ли ошибка уже помещена.Ваш код не добавляет элемент, поэтому при каждом вызове он добавляет ваше изображение снова.

Чтобы увидеть это, сделайте следующее:

jQuery.validator.setDefaults({
  errorPlacement: function(error, element) {
    error.insertAfter(element);  // Add the error element

    var errorTag = '<img src="error.png" title="' + error.html() + '" />';
    var errorImg = $(errorTag);
    errorImg.insertAfter(element);
  }
});

Теперь вы увидите изображение, добавленное только один раз, Однако , errorPlacement не вызывается снова при наличии ошибки, поэтому ваш тег error не изменится.Аналогично, когда добавляется метка успеха, изображение не исчезает автоматически.

Может быть способ сделать это, используя методы jQuery.validate, но, честно говоря, это просто просмотр кода.Я все еще пытаюсь выяснить, как именно все это обрабатывается.

...