我在输入中使用了很棒的jQuery验证插件:
<input type="text" name="name" value="" />
我想添加这个结构(在我的输入周围添加一个div.error并在div中显示我的错误标签),如下所示:
<div class="error">
<label id="name-error" class="error" for="name">This field is required.</label>
<input type="text" name="name" value="" />
</div>
我尝试使用errorPlacement功能,但我无法实现。
答案 0 :(得分:3)
jQuery Validate插件会自动创建并切换错误消息元素。
您可以使用the errorElement
option指定元素的类型,例如div
,label
等。默认值为label
。
您可以使用the errorPlacement
option中的各种jQuery方法指定此错误消息元素的位置,例如在父级内部之前,之后,之后等。默认值是“input
元素之后”。
但是,您无法轻松地将错误消息元素包装在input
元素周围。虽然可以使用jQuery在errorPlacement
选项中执行此操作,但在需要清除错误时会出现问题。当需要清除邮件时,插件会自动删除/隐藏错误消息元素,并且input
元素将随之删除/隐藏。
解决方案是自己创建外部div
并使用highlight
和unhighlight
选项在此外部div
上切换错误类。您必须记住还要在highlight
和unhighlight
中包含默认代码,否则默认行为将被破坏。由于您所需的类是默认错误类,因此您只需使用errorClass
和highlight
选项中的unhighlight
参数。
您的HTML :
<div>
<input type="text" name="name" value="" />
</div>
您的.validate()
方法:
$('#yourForm').validate({
// rules and options,
errorPlacement: function(error, element) {
error.insertBefore(element);
},
highlight: function(element, errorClass, validClass) {
$(element).addClass(errorClass).removeClass(validClass); // <- default behavior
$(element).parent('div').addClass(errorClass); // <- add error class to your parent div
},
unhighlight: function(element, errorClass, validClass) {
$(element).removeClass(errorClass).addClass(validClass); // <- default behavior
$(element).parent('div').removeClass(errorClass); // <- remove error class from your parent div
}
});
验证错误期间DOM的最终结果:
<div class="error">
<label id="name-error" class="error" for="name">This field is required.</label>
<input type="text" name="name" value="" />
</div>
答案 1 :(得分:1)
您应该使用highlight处理程序,它允许您定义将输入标记为无效的方法:
jQuery.validator.setDefaults({
highlight: function(element, error, valid){
$(element).parent("div").addClass(error);
// or do whatever you want
}
});
请注意,还有另一个名为unhighlight
的处理程序,它也应该实现,但与第一个处理程序相反。这里有一个例子:
unhighlight: function(element, error, valid){
$(element).parent("div").removeClass(error);
// or do whatever you want but in opposite way
}
问题的完整解决方案应如下所示:
jQuery.validator.setDefaults({
highlight: function(element, error, valid){
$(element).parent("div").addClass(error);
},
unhighlight: function(element, error, valid){
$(element).parent("div").removeClass(error);
}
});
请注意,上面的代码应该包含在网站上,最好是在你的jquery.validation.js之后,因为它改变了jQuery.validator的默认行为。通过jQuery.validator.setDefaults
执行此操作的优势在于,您的配置将应用于您网站上的每个表单,