Javascript 等待GoogleGeocoder会产生一个jquery自定义验证方法

Javascript 等待GoogleGeocoder会产生一个jquery自定义验证方法,javascript,jquery,google-maps,jquery-validate,google-geocoding-api,Javascript,Jquery,Google Maps,Jquery Validate,Google Geocoding Api,我知道Google的Geocoder服务是异步的,但我需要一种方法,在Google Geocoder结果返回之后而不是之前,向我的自定义jQuery验证方法返回true或false。(例如,服务将查找邮政编码,如果找到,则返回true,否则返回false) 编辑-jQuery验证远程方法是这样做的吗 目前我有一组元素规则,但是当我在下面测试代码时,getLocation方法会在代码加载后立即调用,而不是像我所希望的那样输入第5位数字 $(“#位置”)。规则(“添加”{ 要求:正确, 最小长度:5

我知道Google的Geocoder服务是异步的,但我需要一种方法,在Google Geocoder结果返回之后而不是之前,向我的自定义jQuery验证方法返回true或false。(例如,服务将查找邮政编码,如果找到,则返回true,否则返回false)

编辑-jQuery验证
远程
方法是这样做的吗

目前我有一组元素规则,但是当我在下面测试代码时,
getLocation
方法会在代码加载后立即调用,而不是像我所希望的那样输入第5位数字

$(“#位置”)。规则(“添加”{
要求:正确,
最小长度:5,
最大长度:5,
信息:{
必需:“必需输入”,
minlength:jQuery.validator.format(“请注意,{0}个字符是必需的”),
maxlength:jQuery.validator.format(“请注意,{0}个字符是必需的”)
},
远程:getLocation()
});
函数getLocation(){
var i=0;
}
这是我的自定义方法

$.validator.addMethod(“validateZipCode”,函数(值,元素){
var isValidZipCode=GetGoogleGeocoderResultsByZip(值);
返回zipCodeIsValid;
}“无效位置”);
//地理代码的结果是这样的,但我需要等待返回true/false
函数GetGoogleGeocoderResultsByZip(zipCode){
var geocoder=new google.maps.geocoder();
geocoder.geocode(“组件限制”:{
“国家”:“美国”,
“postalCode”:zipCode
},功能(结果、状态){
if(status==google.maps.GeocoderStatus.OK){
如果(results.length>=1){
返回true;
}
返回false;
}
}
};
,拉动默认的
onkeyup
功能,并为您的超车进行修改

$("#contact").validate({
    onkeyup: function(element, event) {
        if (element.name == "zip-code") {
            return; // no onkeyup validation at all
        } else {
            // default onkeyup validation in here
            var excludedKeys = [
                16, 17, 18, 20, 35, 36, 37,
                38, 39, 40, 45, 144, 225
            ];
            if ( event.which === 9 && this.elementValue( element ) === "" || $.inArray( event.keyCode, excludedKeys ) !== -1 ) {
                return;
            } else if ( element.name in this.submitted || element.name in this.invalid ) {
                this.element( element );
            }
        }
    },
    ....
在下面的概念验证演示中,点击
submit
按钮首先跳过“lazy”验证,然后比较两个字段的行为。第一个字段是在每个
keyup
事件上验证电子邮件地址。第二个字段根本不在
keyup
事件上验证电子邮件,只在
focusout
submit
上验证


演示:

“代码片段”用于在此页面中运行JavaScript代码。由于您无法在此页面上运行代码,我已删除该代码段。如果您只想在输入第5位数字后运行验证,则必须更改触发验证的方式。请尝试将
onkeyup
设置为
false
…然后验证将仅在
focusout
submit
事件。如果您想将此行为限制为一个字段,则需要为
onkeyup
编写一个包含条件的自定义函数。您知道在哪里可以找到onkeyup自定义函数的示例吗?您可以在插件的源代码中查看该函数。