如何检测用户何时向Google商家信息字段输入无效位置?

时间:2016-04-07 16:57:13

标签: javascript jquery google-maps google-maps-api-3 google-places-api

我的表单包含一个连接到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事件中挂起一些东西,但我不确定它会做什么(输入字段中会有东西,只是无效的东西)。我想过有一个跟踪地理编码器是否被调用的信号量,但是我仍然需要检测“无效条目”状态以捕获用户首先输入有效内容然后将其替换为无效内容的情况。

无论如何:有什么想法吗?谢谢!

2 个答案:

答案 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
    }
}