Javascript 自定义jQuery.validator规则存在问题
我对这段代码有一个问题,我似乎无法理解:Javascript 自定义jQuery.validator规则存在问题,javascript,jquery,Javascript,Jquery,我对这段代码有一个问题,我似乎无法理解: $.validator.addMethod('street_address', function (value, element) { var address = value + ', ' + $(element).parent().parent().find("#venue_city_id option:selected").text(), geocoder = new google.maps.Geocoder(), th
$.validator.addMethod('street_address', function (value, element) {
var address = value + ', ' + $(element).parent().parent().find("#venue_city_id option:selected").text(),
geocoder = new google.maps.Geocoder(),
that = this;
geocoder.geocode({address: address}, function (results, status) {
return that.optional(element) || status == google.maps.GeocoderStatus.OK;
});
}, 'invalid address');
它可以使不正确的地址(谷歌无法对其进行地理编码的地址)无效。问题是即使它返回true,我仍然会得到“无效地址”。你知道问题出在哪里吗?你从内部回调返回
geocoder.geocode({address: address}, function (results, status) {
return that.optional(element) || status == google.maps.GeocoderStatus.OK;
});
不是从验证器函数
而且,我相信,
geocoder.geocode
执行异步ajax查询,所以在离开验证器时,您将无法判断您的位置是否是“geocodeable”。对于jQuery验证中的这种情况,应该有一个特定的验证器,称为remote
或其他什么,它根据ajax查询的结果进行验证。是的,这似乎与geocoder.geocode
是一个异步请求这一事实有关。然而,远程
验证似乎不是我所需要的。代码不起作用的原因是100%清楚的,而不仅仅是“似乎”:您没有从验证器函数返回。您可以内联定义另一个函数并从中返回,但它会影响验证器的工作方式。修复并不容易,因为geocoder.geocode
是异步的,但修复不是一个问题。我想说的是它没有影响