Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 自定义jQuery.validator规则存在问题_Javascript_Jquery - Fatal编程技术网

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
是异步的,但修复不是一个问题。我想说的是它没有影响