代码之家  ›  专栏  ›  技术社区  ›  aherrick

jQuery Validate Plugin Add Class errorPlacement错误标签

  •  0
  • aherrick  · 技术社区  · 15 年前

    使用errorPlacement钩子,我可以将某个类添加到某个错误元素。但是,一旦表单第二次尝试提交,它就会失去我添加的类。请参阅下面的代码以获取示例。

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

    如何在验证过程的整个生命周期中保持元素上的附加类?还有其他钩子需要我把类添加回来吗?最终我要完成的是我想在第二个文本框错误标签中添加一个特定的类。

    2 回复  |  直到 15 年前
        1
  •  2
  •   Nick Craver    15 年前

    不幸的是,没有一个直接的方法来实现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 .


    另一个选择,如果你 只有

    label[for=text2].error { margin-left: 10px; }
    
        2
  •  0
  •   user 1007017    15 年前

    很 完美!谢谢!

    我在用一个编辑器(ckeditor)。有了这个以$(“#form1”)为单位的添加,validate我现在可以隐藏生成的错误消息,如果编辑器中输入了什么。

    在keyup上更新extare1

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

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