我的表单包含一个连接到Google Places API的文本字段。我想要发生的是,当输入识别的地址时,我还获得输入位置的纬度/经度位置,并将值压缩到其他表单字段中,这样它们就可以保存在后端而无需另外的API调用。以下初始化代码以及一些调试日志正常工作(对于愚蠢的字段ID道歉;我责怪Drupal ......)
function placesInitialize() {
var input = document.getElementById('edit-field-google-location-und-0-value');
var autocomplete = new google.maps.places.Autocomplete(input);
google.maps.event.addListener(autocomplete, 'place_changed', function () {
var geocoder = new google.maps.Geocoder();
var address = document.getElementById('edit-field-google-location-und-0-value').value;
geocoder.geocode({ 'address': address }, function (results, status) {
console.log('inside geocoder.geocode');
if (status == google.maps.GeocoderStatus.OK) {
var latitude = results[0].geometry.location.lat();
var longitude = results[0].geometry.location.lng();
console.log('lat and long = ' + latitude + ' and ' + longitude);
$('#edit-field-location-latitude-und-0-value').val(latitude);
$('#edit-field-location-longitude-und-0-value').val(longitude);
}
else {
console.log('GeocoderStatus not ok:');
console.log(google.maps.GeocoderStatus);
}
});
});
}
google.maps.event.addDomListener(window, 'load', placesInitialize);
现在,如果用户输入的地方无法识别,我想清除纬度和长字段。这就是我的问题所在:如何检测到这种情况发生了?我曾经以为google.maps.GeocoderStatus
表示不会发出这样的信号,但这些日志从未触发过。实际上,“inside geocoder.geocode”消息也不会出现在这种情况下。
我看过了,但还没有发现google.maps可能会在这种情况下抛出的事件。我可以在输入字段的blur
事件中挂起一些东西,但我不确定它会做什么(输入字段中会有东西,只是无效的东西)。我想过有一个跟踪地理编码器是否被调用的信号量,但是我仍然需要检测“无效条目”状态以捕获用户首先输入有效内容然后将其替换为无效内容的情况。
无论如何:有什么想法吗?谢谢!
答案 0 :(得分:0)
place_change
仅在用户选择下拉列表中的某个建议时触发。当地方图书馆没有回复建议时,什么都不会发生。
由于自动填充功能根本无法访问相关建议(除非您选择一个),您可以通过Autocomplete-Service申请建议(然后您就可以检查是否有任何建议)。
您可以根据返回的建议(例如,通过jQueryUI)自行实现自动完成功能
答案 1 :(得分:0)
place_changed
。如果在地址解析器中找不到任何位置,则place.address_components
将为空,您可以检测到以下情况:
autocomplete.addListener('place_changed', fillInAddress);
function fillInAddress() {
var place = autocomplete.getPlace();
if(!place.address_components) {
// then place doesn't exist
}
}