jquery.validate中使用remote,
remote相同值不校验问题解决
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
蕃薯耀 2015年9月24日 16:18:45 星期四
http://fanshuyao.iteye.com/
remote使用方法:
remote: {
async:false,//默认为异步请求,设置false为同步
url: $("#basePath").val() + "/checkPhoneValidateCode",
//后台处理程序。远程地址只能输出 "true" 或 "false",不能有其他输出。
type: "post" //数据发送方式
}
remote没有结果处理函数,服务器校验后只能输出 "true" 或 "false",不能有其他输出。
remote默认会把校验的属性和值作为参数传到服务器。
而data可以增加其他参数。
remote: {
url: "check-email.php", //后台处理程序
type: "post", //数据发送方式
dataType: "json", //接受数据格式
data: { //要传递的数据
username: function() {
return $("#username").val();
}
}
}
问题描述:
在jquery.validate中使用remote,但是remote只是校验第一次,如果通过了,下次及之后都不会再向服务器请求。
例如验证码,先输入验证码,校验通过后,然后点击换一个验证码,验证码的校验一样是通过的,因为remote没有再向服务器重新发送校验请求。
原因是jquery.validate代码中使用了如下代码:
意思是如果之前已经校验了,则直接使用之前的验证结果。
if ( previous.old === value ) {
return previous.valid;
}
解决方法一:(不推荐)
在jquery.validate.js中找到代码,然后把上面的代码注释掉。
但这种方法不被推荐,怕影响到使用功能。
解决方法二:
既然有数据之前的验证结果,我们就可以把之前的验证结果清除。
($(".remote")为jquery选择器,.remote为自己设置的Class。)
/**
* 移除validate的缓存数据
*/
function clearPreviousValue(){
if($(".remote").data("previousValue")){
$(".remote").removeData("previousValue");
}
};
或者设置为Null
/**
* 移除validate的缓存数据
*/
function clearPreviousValue(){
if($(".remote").data("previousValue")){
$(".remote").data("previousValue").old = null;
}
};
可以给需要远程校验的属性加上一个change事件,清除之前校验结果,这样就方便很多。
$("#phone,#phoneValidateCode").change(function(){
clearPreviousValue();
});
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
蕃薯耀 2015年9月24日 16:18:45 星期四
http://fanshuyao.iteye.com/