2011-07-01 46 views
26

我试图用“errorPlacement”从jQuery验证DOCSjQuery验证 - 错误放置

$("#myform").validate({ 
    errorPlacement: function(error, element) { 
    error.appendTo(element.parent("td").next("td")); 
    }, 
    debug:true 
}) 

我想以前无效输入放置错误,但这不起作用:

$("#myform").validate({ 
     errorPlacement: function(error, element) { 
     error.appendTo(element.parent("form").prev("input")); 
     }, 
     debug:true 
    }) 

LIVE DEMO

非常感谢任何帮助!

+0

什么标记看起来像何地在标记你想要把错误? – kinakuta

+0

@kinakuta - 现场演示已被添加到问题 – Iladarsda

+0

,所以你想错误消息出现在各自的文本框上方? – kinakuta

回答

42

既然你要插入的无效元素之前错误消息,使用insertBefore()

errorPlacement: function(error, element) { 
    error.insertBefore(element); 
} 
+0

Hamidi谢谢!这是行得通的!几乎..就像你在我的例子中看到的那样 - 实际上有两个密码输入(一个用于onfocus效果,另一个用于真实效果),我们可以用#username insertbefore()来说明。和#realpassword insertBefore('#password')?? – Iladarsda

+0

这仅用于#password口令正确工作: 'errorPlacement:功能(错误,元素){ \t \t \t \t \t如果($( '标签[用于= “realpassword”]')){error.insertBefore(” #密码'); } \t \t \t \t \t else if(('label [for =“username”]')){error.insertBefore('#username'); } \t \t \t \t \t \t \t \t}'为什么? – Iladarsda

+0

@Pete,它应该可以工作,但错误信息仍然出现在浏览器中的''元素之后。浮动父''似乎是问题... –

2

另一种选择是......

errorPlacement: function (error, element) { 
    element.before(error); 
    } 
12

只要把您想在哪里错误的部分

<label for="[your checkbox id]" generated="true" class="error"></label> 

例如:

<label><input type="checkbox" name="checkbox" id="checkbox" value="1" > Checkbox content</label> 
<label for="checkbox" generated="true" class="error"></label> 
+0

非常时尚优雅的解决方案 – gouravtiwari21

+0

像亲爱的很酷 – mghhgm

0

我建议使用HTML模板来指定,像这样的位置和造型:

<input name="patient_gender" required> 
<label for="patient_gender" class="validation_error_message help-block"></label> 

和覆盖功能错误放置

$.validator.setDefaults({ 
    errorPlacement: function(error, element) { 
     var name = element.attr('name'); 
     var errorSelector = '.validation_error_message[for="' + name + '"]'; 
     var $element = $(errorSelector); 
     if ($element.length) { 
      $(errorSelector).html(error.html()); 
     } else { 
      error.insertAfter(element); 
     } 
    } 
});