jquery.validate中使用remote,remote相同值不校验问题解决

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/

 

 

 

 

 

 

 

 

posted @ 2015-09-24 16:38  蕃薯耀  阅读(625)  评论(0编辑  收藏  举报