2011-03-25 92 views
7

感觉这个问题之前已经被问过,但没有问题似乎解决了我的问题,所以提前道歉。jQuery验证单个元素上的errorPlacement

因为我使用ASP.NET和无法预测我想验证控件的名字,我建立我的JQuery验证规则,像这样:

jQuery('textarea[id$=MessageTextInput]').rules("add", { required: true, messages: { required: "required"} }); 
jQuery('input[id$=LinkTextInput]').rules("add", { required: true, messages: { required: "required"} }); 
jQuery('input[name$=PositionChoiceInput]').rules("add", { required: true, messages: { required: "required"} }); 

不是:

$('#aspnetForm')。validate({options and rules}); //需要控制名称

问题是,第三个规则是radiobuttonlist,并且错误消息没有放在正确的位置。它被放置在第一个单选按钮之后,而我希望它在最后一个单选按钮列表之后。

jQuery('textarea[id$=MessageTextInput]').rules("add", { required: true, messages: { required: "required"} }); 
jQuery('input[id$=LinkTextInput]').rules("add", { required: true, messages: { required: "required"} }); 
jQuery('input[name$=PositionChoiceInput]').rules("add", { required: true, messages: { required: "required"} }); 

但是,当我添加errorPlacement选项时,似乎无法使用该方法。我也尝试了以下内容:

jQuery('#aspnetForm').validate({ errorPlacement: function (error, element) { 
      if (element.hasClass('sfRadioList')) { 
       error.insertAfter(element.parent("ul")); 
      } 
     } 
     }); 
jQuery('textarea[id$=MessageTextInput]').rules("add", { required: true, messages: { required: "required"} }); 
jQuery('input[id$=LinkTextInput]').rules("add", { required: true, messages: { required: "required"} }); 
jQuery('input[name$=PositionChoiceInput]').rules("add", { required: true, messages: { required: "required"} }); 

但这仍然没有奏效。我能做些什么来设置一个元素的位置?

在此先感谢 higgsy

回答

16

下面是一些代码为我工作...

errorPlacement: function(error, element) { 
if (element.attr("name") == "pdfEmailAddress") 
    { 
     error.insertAfter("ul.slinks"); 
    } 
    else 
    { 
     error.insertAfter(element); 
    } 
} 
+0

对我来说!感谢您的回答。 – higgsy 2011-06-22 15:57:13