2010-10-23 3 views
0

Использование hookPlacement hook Я могу добавить определенный класс к определенному элементу ошибки. Однако, как только форма попытается представить второй раз, она теряет класс, который я добавил. См. Следующий код для примера.jQuery Validate Plugin Добавить класс errorPlacement Error Label

http://www.jsfiddle.net/NU63P/1

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

ответ

2

К сожалению, это не прямой способ сделать это предусмотрено API, потому что он сделал (на мой взгляд) плохое решение здесь:

showLabel: function(element, message) { 
    var label = this.errorsFor(element); 
    if (label.length) { 
    label.removeClass().addClass(this.settings.errorClass); 
        //^ right here 
    } 

Это то, что удаление всех ваших классов, и, к сожалению, это также последнее, что нужно выполнить в недействительном конвейере обработчика. Однако, она вызывается defaultShowErrors(), которые вы можете назвать себя, перекрывая опцию showErrors, как это:

$(function() { 
    $('form').validate({ 
    showErrors: function(errorMap, errorList) { 
     this.defaultShowErrors(); 
     $(this.currentForm).find('label[for=text2].error').addClass('errorextra'); 
    } 
    }); 
}); 

You can test it out here.


Другой вариант, если вы только поддерживающие более новые браузеры были бы сделать это полностью в CSS:

label[for=text2].error { margin-left: 10px; } 
+0

именно то, что я искал благодаря мужчине – aherrick

0

Отлично! Благодаря!

Я использую редактор (ckeditor). С этим добавлением, которое сделано в $ ("# form1"). Validate. Теперь я могу скрыть генерируемое сообщение об ошибке, если что-то будет введено в редакторе.

Вот соответствующие части моего кода ... НТН для кого-то ...

updateTextArea1 на KeyUp

CKEDITOR.instances.editor1.on("instanceReady", function() 
      { 
       //set keyup event 
       this.document.on("keyup", updateTextArea1); 
       //and paste event 
       this.document.on("paste", updateTextArea1); 

      }); 

получить данные editor1, обновить редактор и скрыть ошибку сообщение

function updateTextArea1() 
     { 
      CKEDITOR.tools.setTimeout(function() 
      { 
      var oEditor1 = CKEDITOR.instances.editor1; 
      var content1 = oEditor1.getData(); 

      CKEDITOR.instances.editor1.updateElement(); 
      $(".error.errorextra1").hide() 
      }, 0); 
     } 

добавление дополнительного класса в генерируемое сообщение об ошибке jquery validator

var validator = $("#form1").validate({ 

     showErrors: function(errorMap, errorList) { 
      this.defaultShowErrors(); 
      $(this.currentForm).find('label[for=editor1].error').addClass('errorextra1'); 
      $(this.currentForm).find('label[for=editor2].error').addClass('errorextra2'); 
     }, 
Смежные вопросы