2010-06-01 115 views
2

在jQuery驗證上的錯誤的默認行爲是創建一個標籤,就像這樣:jQuery驗證 - 如何title屬性設置爲錯誤消息

<label for="FirstName" generated="true" class="error">This field is required.</label> 

是否有可能改變它,這樣它會輸出這個代替(標題屬性設置爲錯誤消息)?

<label for="FirstName" generated="true" class="error" title="This field is required.">This field is required.</label> 

我已經試過亮點方法,但該標籤尚未創建:

$("#form").validate({ 
    highlight: function (element, errorClass) { 
     var label = $("label[for=" + element.id + "]"); // but label doesn't exist yet so this doesnt work 
     if (label && label.length > 0) { // label.length is always 0 
      label.attr('title', label.text()); 
     } 
    } 
}); 

回答

4

OK試試這個...

$("#form").validate({ 
    highlight: function (element, errorClass) { 
     setTimeout(function() { 
      var label = $("label[for=" + element.id + "]"); 
      if (label && label.length > 0) { 
       label.attr('title', label.text()); 
      } 
     }, 10);  
    } 
}); 

基本上我們只是延遲部分我們將標題屬性設置爲10ms,因此我們確信標籤元素是首先創建的。

希望這有助於

+0

有點破解,但似乎工作,現在就試用它。 – 2010-06-01 04:38:45

+0

是的,但我認爲這是最接近成功回調的對手...... – ricecake5 2010-06-01 05:13:45

0

試試這個。

var validator = $('#form1').validate({ 
     highlight: function (element, errorClass, message) { 
      var errorMessage = validator.errorMap[element.name] 
      $(element).attr('title', errorMessage); 
     } 
    }); 

沒有黑客需要

0

我'有點晚了,但偶然發現了這個問題,另一個解決方案是使用errorPlacement回調。

editid:也刪除生成的屬性,否則消息文本在重新應用消息時編輯字段後會刷新。

var validator = $('#form1').validate({ 
    errorPlacement: function(error, element) { 
    element.attr('title', error.text()); 
    error.text('!'); 
    error.removeAttr('generated'); 
    error.appendTo(element.parent()); 
    return true; 
    } 
}