我有一个简单的表单来验证用户输入项目名称的位置。如果当前操作是“创建”,我必须检查输入的值是否已经在数据库中并返回错误消息。如果是编辑,我必须检查输入的值是否与当前值不同,并且在这种情况下再次检查新的是否已经在数据库中。 代码在这里:
if (((ACTION_CURRENT == ACTION_EDIT) && ($(id).val() != projectData.project.name)) || (ACTION_CURRENT == ACTION_CREATE)) {
initProjectNameValidator();
}
if ($(id).valid()) {
return true;
} else {
return false;
}
function initProjectNameValidator() {
jQuery.validator.addMethod('checkDuplicateName', function(value) {
var isInArray = $.inArray(value, projectsNames);
return (isInArray == -1);
}, messages.duplicateProject);
$('#editProjectDialogForm').validate({
rules : {
projectForm_name : {
required : true,
checkDuplicateName : true
}
}
});
}
初看起来,它运作正常。但是当动作是“编辑”时会出现问题。如果我有项目(aaa,bbb,ccc),我去项目“aaa”并尝试将其更改为“bbb”,它会正确返回错误消息。如果我去项目“aaa”并尝试将其更改为“aaa”,它正确地不会返回错误消息。但问题来了。如果我去项目“aaa”尝试将其更改为“aaa”没有问题,但如果没有刷新尝试之后将其更改为“bbb”,也没有错误消息,但这里必须是一条错误消息。如果我尝试从“aaa”更改为“bbb”,同样会发生 - 给出错误,如果没有刷新尝试更改为“aaa”,则会再次出现错误,但不应该有
答案 0 :(得分:0)
你的问题很不清楚,似乎很多相关代码都缺失了。但是,有一个明显的错误......
你的逻辑是有缺陷的。您在调用.valid()
方法之前尝试使用.validate()
方法。
.validate()
仅用于初始化表单上的插件,必须先调用。然后,在初始化之后,您可以通过调用.valid()
方法以编程方式触发验证。