我的搜索框上有一个地方自动填充对象。
var navbarAutocomplete = new window.google.maps.places.Autocomplete(navbarInput, navbarOptions);
我还有一个听众活动,用于' place_changed'并且我调用maps.geocoder对字符串进行搜索IF自动完成没有任何结果。我担心的是,如果地理编码永远不会返回(例如链接已关闭),我就不会调用表单提交。 问题 - 我应该设置一个计时器,如果在一段时间后,如果地理编码结果没有回来我可以超时并致电表单提交?如果是这样,我该怎么做?我担心的是,如果我超时拨打电话表单提交,那么地理编码结果将返回并提交,即2个电话。
这是我的事件监听器。
google.maps.event.addListener(navbarAutocomplete, 'place_changed', function() {
var searchedPlace = navbarAutocomplete.getPlace();
if (searchedPlace.geometry === undefined) {
$("#latitude").val(searchedPlace.geometry.location.G);
$("#longitude").val(searchedPlace.geometry.location.K);
$("#mapType").val(searchedPlace.types[0]);
$('form')[0].submit();
} else {
var navbarGeocoder = new google.maps.Geocoder();
navbarGeocoder.geocode({
'address': navbarInput.value
}, function(results, status) {
if (status == google.maps.GeocoderStatus.OK) {
$("#latitude").val(results[0].geometry.location.G);
$("#longitude").val(results[0].geometry.location.K);
$("#mapType").val(results[0].types[0]);
}
$('form')[0].submit();
});
}
});

答案 0 :(得分:0)
您可以在提交地理编码请求之前立即启动计时器,并让计时器在执行其代码之前设置地理编码请求检查的标记。
如果地理编码在计时器之前成功运行,则运行clearTimeout
以防止计时器执行。
google.maps.event.addListener(navbarAutocomplete, 'place_changed', function() {
var searchedPlace = navbarAutocomplete.getPlace();
if (searchedPlace.geometry === undefined) {
$("#latitude").val(searchedPlace.geometry.location.G);
$("#longitude").val(searchedPlace.geometry.location.K);
$("#mapType").val(searchedPlace.types[0]);
$('form')[0].submit();
} else {
var navbarGeocoder = new google.maps.Geocoder();
var timedOut = false; // indicates if timer code has run
var timerId = setTimeout(function() {
timedOut = true;
// submit form
}, 10000);
navbarGeocoder.geocode({
'address': navbarInput.value
}, function(results, status) {
if (false === timedOut && status == google.maps.GeocoderStatus.OK) {
clearTimeout(timerId); //prevent timer code from running
$("#latitude").val(results[0].geometry.location.G);
$("#longitude").val(results[0].geometry.location.K);
$("#mapType").val(results[0].types[0]);
}
$('form')[0].submit();
});
}
});

答案 1 :(得分:0)
我觉得这样的事情可能有用
google.maps.event.addListener(navbarAutocomplete, 'place_changed', function() {
var searchedPlace = navbarAutocomplete.getPlace();
if (searchedPlace.geometry === undefined) {
$("#latitude").val(searchedPlace.geometry.location.G);
$("#longitude").val(searchedPlace.geometry.location.K);
$("#mapType").val(searchedPlace.types[0]);
$('form')[0].submit();
} else {
var timedOut = false;
var formSubmitted = false;
var navbarGeocoder = new google.maps.Geocoder();
navbarGeocoder.geocode({
'address': navbarInput.value
}, function(results, status) {
if (!timedOut) {
if (status == google.maps.GeocoderStatus.OK) {
$("#latitude").val(results[0].geometry.location.G);
$("#longitude").val(results[0].geometry.location.K);
$("#mapType").val(results[0].types[0]);
}
formSubmitted = true;
$('form')[0].submit();
}
});
var timerId = setTimeout(function() {
timedOut = true;
alert('Request timed out.');
if (!formSubmitted) {
$('form')[0].submit();
}
}, 3000);
}
});
答案 2 :(得分:0)
这是我的工作解决方案。
google.maps.event.addListener(navbarAutocomplete, 'place_changed', function() {
var searchedPlace = navbarAutocomplete.getPlace();
if (searchedPlace.geometry === undefined) {
$("#latitude").val(searchedPlace.geometry.location.G);
$("#longitude").val(searchedPlace.geometry.location.K);
$("#mapType").val(searchedPlace.types[0]);
$('form')[0].submit();
} else {
var navbarGeocoder = new google.maps.Geocoder();
var timedOut = false; // indicates if timer code has run
var timerId = setTimeout(function() {
timedOut = true;
// submit form
$('form')[0].submit();
}, 3000);
navbarGeocoder.geocode({
'address': navbarInput.value
}, function(results, status) {
if (timedOut === false) {
clearTimeout(timerId);
if (status == google.maps.GeocoderStatus.OK) {
$("#latitude").val(results[0].geometry.location.G);
$("#longitude").val(results[0].geometry.location.K);
$("#mapType").val(results[0].types[0]);
}
$('form')[0].submit();
}
});
}
});