我最近两次遇到了类似的问题,并且花了很多时间试图弄清楚,所以我将在这里留下一个简单的解决方案。如果版主认为这不是正确的地方,请告诉我。
运行此示例代码时发生错误:
$(document).ready(function () {
$.validator.addMethod("numberEqualTo", function (value, element, parameter) {
return parseInt(value) === parseInt(parameter);
}, "Values must match");
$("#example2").validate({
focusInvalid: false,
onkeyup: true,
onfocusout: true,
errorElement: "div",
errorPlacement: function (error, element) {
error.appendTo("div#errors");
},
rules: {
"example2-fullname": {
required: true,
minlength: 5
},
"example2-phone": {
required: true,
number: true
},
"example2-zip": {
required: true,
number: true,
rangelength: [3, 5]
},
"example2-value": {
required: true,
number: true,
numberEqualTo: 10
}
},
messages: {
"example2-fullname": {
required: "You must enter your full name",
minlength: "First name must be at least 5 characters long"
},
"example2-phone": {
required: "You must enter your phone number",
number: "Phone number must contain digits only"
},
"example2-zip": {
required: "You must enter your zip code",
number: "Zip code must contain digits only",
rangelength: "Zip code must have between 3 to 5 digits"
},
"example2-value": {
required: "You must enter your value",
number: "Value must be a digit",
numberEqualTo: "Value must be equal to 10"
}
}
});
});
为什么?出于某种原因,如果您明确指定:
onkeyup: true,
onfocusout: true,
程序将抛出上述异常。当您将以上选项中的任何一个或两个都设置为“真”时,就会出现这种情况。另一方面,如果您将 BOTH 设置为 'false' 或 ONE 设置为 'false' 并删除另一个,它将按预期工作。
最重要的是:如果您删除或注释掉这些选项中的任何一个,您删除的选项将被设置为默认值,即“真”并且不会抛出任何错误。因此可以完全按照这种方式自定义验证插件您需要,您只需要记住不要将这些选项明确设置为“真”。
我希望这会对某人有所帮助,尽管这个特定用户在这个问题中的实际问题已经得到解决。