我不相信当字段通过验证时显示错误消息是可能的。插件内部是在字段通过验证时隐藏所有标签的代码。我看到您可能只是在尝试模拟效果。
如果您想解决这个问题,我将提供一些见解,最终可能会带您找到解决方案。
查看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
and是 & 元素的valid
默认 CSS ,您也许可以像这样利用它们的颜色......class
label
label.valid {
color: #00f;
}
label.error {
color: #f00;
}
这是一个可用于测试的 jsFiddle:http: //jsfiddle.net/7TPvP/
这是所有回调函数和选项的文档:http: //docs.jquery.com/Plugins/Validation/validate#toptions
关于您的代码的一些注释:
引用操作:
“错误放置代码似乎没有再次执行,现在我可以看到蓝色和红色标签。”
那是因为实际的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);
}
});
});