2010-10-23 78 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'); 
     },