2010-10-23 76 views
0

使用errorPlacement挂钩我可以将某个类添加到某个错误元素。然而,一旦形式第二次提交,它就会失去我添加的课程。该示例请参阅以下代码。jQuery验证插件添加类errorPlacement错误标签

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 2010-10-24 13:32:37

0

完美!谢谢!

我正在使用编辑器(ckeditor)。在$(“#form1”)中添加这个添加项。validate现在我可以隐藏生成的错误消息,如果在编辑器中输入了内容。

这里我的代码的相关部分... HTH的人......对KEYUP

updateTextArea1

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验证器生成的错误消息中

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'); 
     },