2010-06-01 59 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; 
    } 
}