我不相信当字段通过验证时显示错误消息是可能的。插件内部是在字段通过验证时隐藏所有标签的代码。不过,我知道您可能只是在尝试模拟效果。
如果您想尝试一下,我将提供一些见解,最终可能会带您找到解决方案。
查看highlight 和unhighlight 回调。这些补充功能是为显示通过/失败图标等而设计的。
这里有他们的默认代码:
highlight: function (element, errorClass, validClass) {
if (element.type === "radio") {
this.findByName(element.name).addClass(errorClass).removeClass(validClass);
} else {
$(element).addClass(errorClass).removeClass(validClass);
}
},
unhighlight: function (element, errorClass, validClass) {
if (element.type === "radio") {
this.findByName(element.name).removeClass(errorClass).addClass(validClass);
} else {
$(element).removeClass(errorClass).addClass(validClass);
}
},
这是默认的errorPlacement回调:
errorPlacement: function (error, element) {
error.insertAfter(element);
},
success 回调没有默认值,但根据文档,您可以在成功时使用它在标签中放置文本。
success: function (label) {
label.removeClass('error').addClass('valid').text('ok')
},
由于error 和valid 是class 的默认CSS label & 元素,您或许可以像这样利用它们的颜色...
label.valid {
color: #00f;
}
label.error {
color: #f00;
}
这是一个可用于测试的 jsFiddle:http://jsfiddle.net/7TPvP/
这是所有回调函数和选项的文档:http://docs.jquery.com/Plugins/Validation/validate#toptions
关于您的代码的一些注释:
引用 OP:
“错误放置代码似乎没有再次执行,现在我有
蓝色和红色标签都可见。”
这是因为实际的label(由插件为错误创建的)已经放置了一次。无需再次放置。如果您想让某些东西不断地开启和关闭,请查看highlight 和unhighlight 回调函数。
编辑:
这里有一些非常接近你想要的东西。你仍然需要稍微调整一下......
演示:http://jsfiddle.net/2mwfG/
$(document).ready(function () {
$('#myform').validate({ // initialize the plugin
// other options and rules,
highlight: function (element, errorClass, validClass) {
if (element.type === "radio") {
this.findByName(element.name).addClass(errorClass).removeClass(validClass);
} else {
$(element).addClass(errorClass).removeClass(validClass);
$(element).prev('.mandatory').hide(); // <-- added this
}
},
unhighlight: function (element, errorClass, validClass) {
if (element.type === "radio") {
this.findByName(element.name).removeClass(errorClass).addClass(validClass);
} else {
$(element).removeClass(errorClass).addClass(validClass);
$(element).prev('.mandatory').show(); // <-- added this
}
},
errorPlacement: function (error, element) {
error.insertAfter(element);
}
});
});