我正在使用jQuery validation plugin来验证我的表单,我也使用addmethod
函数来创建自己的验证方法。这就是我设置jQuery Validator的方法:
$(document).ready(function() {
if ($("#validation_json").length > 0) {
var validationJSON = JSON.parse(decodeURIComponent($("#validation_json").val()));
$(".form-horizontal").validate({
rules: validationJSON.rules,
messages: validationJSON.messages
});
}
});
我输入了带有valid_json的标签,并将值设置为jQuery验证器插件的一组规则和消息;在表单构建器的帮助下,这些规则和消息在服务器端输出。唯一的问题是每当我添加自己的验证方法时,就像这样:
jQuery.validator.addMethod("uniqueemail", function(email) {
return false; //just for testing
}, "This email is already in use");
jQuery验证器将在提交字段之前使用此方法来检查它是否有效(此外还有上面设置的规则),但是如果其中一个addMethod
验证为false,它将使用该消息对于上面在validate方法中设置的项目,而不是传递给addMethod
的消息。有没有人知道我可以让它显示实际传递给addMethod函数的消息?谢谢!
更新:
这是显示问题的jsFiddle链接。
答案 0 :(得分:1)
你如何设置它有一个问题...
$(document).ready(function() {
if ($("#validation_json").length > 0) {
var validationJSON = JSON.parse(decodeURIComponent($("#validation_json").val()));
$(".form-horizontal").validate({
rules: validationJSON.rules,
messages: validationJSON.messages
});
}
});
.validate()
用于在DOM准备好初始化插件一次。您已将其置于条件语句中,因此如果满足if
条件,则插件仅在表单上初始化。验证将无法在其他所有时间初始化。使用.valid()
触发验证测试,而不是重新初始化插件...
$(document).ready(function() {
$(".form-horizontal").validate({
rules: validationJSON.rules,
messages: validationJSON.messages,
// any other options
});
if ($("#validation_json").length > 0) {
var validationJSON = JSON.parse(decodeURIComponent($("#validation_json").val()));
$(".form-horizontal").valid(); // trigger a validation test
}
jQuery.validator.addMethod("uniqueemail", function(email) {
return false; //just for testing
}, "This email is already in use");
});
基本演示: http://jsfiddle.net/AYvmg/
该演示显示来自addMethod
的自定义消息正在按预期工作。
然后,可以使用.rules('add')
方法动态更改自定义消息,而无需再调用.validate()
。
$('#yourfield').rules('add', {
messages: {
uniqueemail: "this is a new message"
}
});
另一项基本演示: http://jsfiddle.net/5RnLM/
这第二个演示就像第一个演示一样。然后,当您单击#test
按钮时,规则的消息将更改为其他内容。您可以使用此.rules('add')
方法在需要时以及从任何其他功能更改自定义消息。
否则,也许您可以显示关联的HTML并构建一个jsFiddle演示,以更清楚地显示您遇到的问题。