正常情况下依次验证是没有问题的
当用户名失去焦点时验正用户名已存在成功!
[img]http://dl.iteye.com/upload/attachment/382283/39823f26-7767-3914-9262-f8444fdbe190.jpg[/img]
但如果先填写用户名与密码再去选择客户结果是验证通过,插入的相同的数据
[img]http://dl.iteye.com/upload/attachment/382305/6027d801-9e73-3b88-a532-a7141ffb18cc.jpg[/img]
[img]http://dl.iteye.com/upload/attachment/382307/dce0a13e-77dd-3b34-8c3e-dfc5b40165e5.jpg[/img]
请问可以在点提交时重新验证所有的状态吗?
[quote]我的页面的的ID是name 你说这地方是用的id还是什么?[/quote]
传入去的值应该是一个选择器,如"#name",实际上它会这样用 $("#name")[0]。
[code="javascript"]var validator = $("#form").validate({
});[/code]
validator.element("#name"); // 这样是可以的。 注意前面要是你的validate定义的返回值。
在选择客户时,触发用户名验证就可以了。
假设 客户的 ID 为 customer , 用户名的 ID 为 username 。
[code="javascript"]
var validateForm = $("#form").validate({
// ........
});
$("#customer").change(function(){
validateForm.element("#username");
});
[/code]
可以,在没有提交表单的情况下,可以使用valid()方法进行验证
[code="javascript"]
/**
* 页面加载完毕后执行操作
*/
$(function() {
addValidate();
});
/**
* 为字段添加验证
*/
function addValidate() {
$("#baseKeyForm").validate({
rules : {
"socketBaseKey" : { required : true, equalLength : 24 },
"soapBaseKey" : { required : true, equalLength : 24 },
"socketBaseKey2" : { required : true, equalTo : "#socketBaseKey" },
"soapBaseKey2" : { required : true, equalTo : "#soapBaseKey" }
}
});
}
/**
* 保存
*/
function save(){
// 手工验证表单, 使用验证插件的valid()方法
if (!$("#baseKeyForm").valid()) return false;
alert("验证通过!");
}
[/code]
// 手工验证表单, 使用验证插件的valid()方法
if (!$("#baseKeyForm").valid()) return false;
[quote]依照您的方法后还是验正通过的状态,它只能验证文本框是否输入正确无法验正是否存在![/quote]
把你的完整验证方法贴出来看看。 应该是你传回后台验证的参数不对。
我理解错你的意思,你应该在下拉框、输入框的值改变的时候,用jQuery的Ajax到后面验证一下
下面这段代码可以实现你的需求:
[code="javascript"]
/**
/**
"user.username" 有一个 remote 校验。
当 "user.username" 的值不改变时,不会校验二次 remote。也就是想所属客户改变但用户名没有改变时,要重新校验remote须改源代码(源代码里做了优化,不校验二次一样的,这其实也算是一个bug)。
源代码如下:
[code="javascript"]
// http://docs.jquery.com/Plugins/Validation/Methods/remote
remote: function(value, element, param) {
if ( this.optional(element) )
return "dependency-mismatch";
var previous = this.previousValue(element);
if (!this.settings.messages[element.name] )
this.settings.messages[element.name] = {};
previous.originalMessage = this.settings.messages[element.name].remote;
this.settings.messages[element.name].remote = previous.message;
param = typeof param == "string" && {url:param} || param;
if ( previous.old !== value ) { // 就是这里的错,你把这一行及后面对应的 } 删了就行了。
previous.old = value;
var validator = this;
this.startRequest(element);
var data = {};
data[element.name] = value;
$.ajax($.extend(true, {
url: param,
mode: "abort",
port: "validate" + element.name,
dataType: "json",
data: data,
success: function(response) {
validator.settings.messages[element.name].remote = previous.originalMessage;
var valid = response === true;
if ( valid ) {
var submitted = validator.formSubmitted;
validator.prepareElement(element);
validator.formSubmitted = submitted;
validator.successList.push(element);
validator.showErrors();
} else {
var errors = {};
var message = (previous.message = response || validator.defaultMessage( element, "remote" ));
errors[element.name] = $.isFunction(message) ? message(value) : message;
validator.showErrors(errors);
}
previous.valid = valid;
validator.stopRequest(element, valid);
}
}, param));
return "pending";
} else if( this.pending[element.name] ) {
return "pending";
}
return previous.valid;
},
[/code]
[quote]是可以在提交的时候再次验证是否存在,但是在正确的情况下无法提交表单阿!请问是那里出问题了吗?[/quote]
这么神奇? 这样改试下:
[code="javascript"]
// http://docs.jquery.com/Plugins/Validation/Methods/remote
remote: function(value, element, param) {
if ( this.optional(element) )
return "dependency-mismatch";
var previous = this.previousValue(element);
if (!this.settings.messages[element.name] )
this.settings.messages[element.name] = {};
previous.originalMessage = this.settings.messages[element.name].remote;
this.settings.messages[element.name].remote = previous.message;
param = typeof param == "string" && {url:param} || param;
//if ( previous.old !== value ) { // 就是这里的错,你把这一行及后面对应的 } 删了就行了。
previous.old = value;
var validator = this;
this.startRequest(element);
var data = {};
data[element.name] = value;
$.ajax($.extend(true, {
url: param,
mode: "abort",
port: "validate" + element.name,
dataType: "json",
data: data,
success: function(response) {
validator.settings.messages[element.name].remote = previous.originalMessage;
var valid = response === true;
if ( valid ) {
var submitted = validator.formSubmitted;
validator.prepareElement(element);
validator.formSubmitted = submitted;
validator.successList.push(element);
validator.showErrors();
} else {
var errors = {};
var message = (previous.message = response || validator.defaultMessage( element, "remote" ));
errors[element.name] = $.isFunction(message) ? message(value) : message;
validator.showErrors(errors);
}
previous.valid = valid;
validator.stopRequest(element, valid);
}
}, param));
// return "pending";
//} else if( this.pending[element.name] ) {
// return "pending";
//}
return previous.valid;
},
[/code]
[quote]依然不行阿`点提交后没反应了
把这样还原就可以提交。这是为什么呢?[/quote]
不好调试,郁闷,这样可以了吧:
[code="javascript"]
// http://docs.jquery.com/Plugins/Validation/Methods/remote
remote: function(value, element, param) {
if ( this.optional(element) )
return "dependency-mismatch";
var previous = this.previousValue(element);
if (!this.settings.messages[element.name] )
this.settings.messages[element.name] = {};
previous.originalMessage = this.settings.messages[element.name].remote;
this.settings.messages[element.name].remote = previous.message;
param = typeof param == "string" && {url:param} || param;
//if ( previous.old !== value ) { // 就是这里的错,你把这一行及后面对应的 } 删了就行了。
previous.old = value;
var validator = this;
this.startRequest(element);
var data = {};
data[element.name] = value;
$.ajax($.extend(true, {
url: param,
mode: "abort",
port: "validate" + element.name,
dataType: "json",
data: data,
success: function(response) {
validator.settings.messages[element.name].remote = previous.originalMessage;
var valid = response === true;
if ( valid ) {
var submitted = validator.formSubmitted;
validator.prepareElement(element);
validator.formSubmitted = submitted;
validator.successList.push(element);
validator.showErrors();
} else {
var errors = {};
var message = (previous.message = response || validator.defaultMessage( element, "remote" ));
errors[element.name] = $.isFunction(message) ? message(value) : message;
validator.showErrors(errors);
}
previous.valid = valid;
validator.stopRequest(element, valid);
}
}, param));
return "pending";
//} else if( this.pending[element.name] ) {
// return "pending";
//}
return previous.valid;
},
[/code]
看来不简单哦,呵~ 换种方式了,不改源码了。
[code="javascript"]
var validateForm = $("#form").validate({
// ........
});
$("#customer").change(function(){
var value = $("#username");
$("#username").val("--y==a--");
validateForm.element("#username");
$("#username").val(value);
validateForm.element("#username");
});
[/code]
:D
[code="javascript"]
$("#clientId").change(function(){
var value = $("#name");
$("#name").val("");
});
[/code]
这样用户不会有意见吗? 输入了用户名却不见了。
我觉还是先改变一下值,触发校验,再自动改回来较好。
[code="javascript"]
$("#clientId").change(function(){
var value = $("#name");
$("#name").val("");
validate.element("#username");
$("#name").val(value);
validate.element("#username");
});
[/code]
[quote]你这样写变成空值后就变不回来了阿!![/quote]
写错了。
$("#clientId").change(function(){
var value = $("#name").val(); // 忘了写val()了,呵
$("#name").val("");
validate.element("#username");
$("#name").val(value);
validate.element("#username");
});
[code="javascript"]
$("#clientId").change(function(){
var value = $("#name").val(); // 忘了写val()了,呵
$("#name").val("");
validate.element("#name");
$("#name").val(value);
validate.element("#name");
});
[/code]