2014-10-22 63 views
17

这看起来很简单,但我无法弄清楚。我正在使用jquery validate插件。我试图验证<input name=first><input name=second>输出错误信息到:Jquery验证自定义错误消息位置

<span id="errNm2"></span> <span id="errNm1"></span> 

我已经开始写errorPlacement:这是您自定义错误消息的位置。

如何将错误消息放入那些<span>

$(document).ready(function() { 
    $('#form').validate({ 
     errorPlacement: function(error, element) { 
      error.append($('.errorTxt span')); 
     }, 
     rules, 
}); 
<input type="text" name="first"/> 
<input type="text" name="second"/> 

<div class="errorTxt"> 
    <span id="errNm2"></span> 
    <span id="errNm1"></span> 
</div> 

回答

58

你应该用的是errorLabelContainer

jQuery(function($) { 
 
    var validator = $('#form').validate({ 
 
    rules: { 
 
     first: { 
 
     required: true 
 
     }, 
 
     second: { 
 
     required: true 
 
     } 
 
    }, 
 
    messages: {}, 
 
    errorElement : 'div', 
 
    errorLabelContainer: '.errorTxt' 
 
    }); 
 
});
.errorTxt{ 
 
    border: 1px solid red; 
 
    min-height: 20px; 
 
}
<script type="text/javascript" src="http://code.jquery.com/jquery-1.11.1.js"></script> 
 
<script type="text/javascript" src="http://cdnjs.cloudflare.com/ajax/libs/jquery-validate/1.12.0/jquery.validate.js"></script> 
 
<script type="text/javascript" src="http://cdnjs.cloudflare.com/ajax/libs/jquery-validate/1.12.0/additional-methods.js"></script> 
 

 
<form id="form" method="post" action=""> 
 
    <input type="text" name="first" /> 
 
    <input type="text" name="second" /> 
 
    <div class="errorTxt"></div> 
 
    <input type="submit" class="button" value="Submit" /> 
 
</form>


如果你想保留您的结构,那么

jQuery(function($) { 
 
    var validator = $('#form').validate({ 
 
    rules: { 
 
     first: { 
 
     required: true 
 
     }, 
 
     second: { 
 
     required: true 
 
     } 
 
    }, 
 
    messages: {}, 
 
    errorPlacement: function(error, element) { 
 
     var placement = $(element).data('error'); 
 
     if (placement) { 
 
     $(placement).append(error) 
 
     } else { 
 
     error.insertAfter(element); 
 
     } 
 
    } 
 
    }); 
 
});
#errNm1 { 
 
    border: 1px solid red; 
 
} 
 
#errNm2 { 
 
    border: 1px solid green; 
 
}
<script type="text/javascript" src="http://code.jquery.com/jquery-1.11.1.js"></script> 
 
<script type="text/javascript" src="http://cdnjs.cloudflare.com/ajax/libs/jquery-validate/1.12.0/jquery.validate.js"></script> 
 
<script type="text/javascript" src="http://cdnjs.cloudflare.com/ajax/libs/jquery-validate/1.12.0/additional-methods.js"></script> 
 

 
<form id="form" method="post" action=""> 
 
    <input type="text" name="first" data-error="#errNm1" /> 
 
    <input type="text" name="second" data-error="#errNm2" /> 
 
    <div class="errorTxt"> 
 
    <span id="errNm2"></span> 
 
    <span id="errNm1"></span> 
 
    </div> 
 
    <input type="submit" class="button" value="Submit" /> 
 
</form>

+1

这是完美的!我不知道你可以将错误与数据错误相匹配。这是我今天学到的东西。谢谢@阿伦! – learntosucceed 2014-10-22 20:47:36

+0

谢谢!这对我有效。 – 2015-06-16 09:52:23

+0

大@Arun P Johny你节省我的时间 – 2015-11-19 15:12:21

11

您可以简单地创建符合您在同样的功能需要的字段这额外的条件。例如,使用上面的代码...

$(document).ready(function() { 
    $('#form').validate({ 
     errorPlacement: function(error, element) { 
      //Custom position: first name 
      if (element.attr("name") == "first") { 
       $("#errNm1").text(error); 
      } 
      //Custom position: second name 
      else if (element.attr("name") == "second") { 
       $("#errNm2").text(error); 
      } 
      // Default position: if no match is met (other fields) 
      else { 
       error.append($('.errorTxt span')); 
      } 
     }, 
     rules 
}); 

希望帮助!

+0

这几乎是为我工作。我唯一的问题是'其他'条件。如何将其更改为运行默认验证位置? – 2016-10-19 16:31:20

+0

这是有效的,但是考虑Arun的解决方案,使用数据属性来允许您在标记中指定它,而不必为每个输入的errorPlacement函数添加一个新条件,这不是非常干燥。 – Kyle 2017-08-10 15:59:44

1
if (e.attr("name") == "firstName") { 
    $("#firstName__validate").text($(error).text()); 
    console.log($(error).html()); 
} 

尝试错误对象的这种获取文本