如何检测用户何时在Google Places字段中输入无效位置

How to detect when a user enters an invalid location to a Google Places field?

本文关键字:字段 Places Google 输入 位置 无效 何时 何检测 检测 用户      更新时间:2024-03-18

我有一个表单,它包含一个连接到Google Places API的文本字段。我想做的是,当输入识别的地址时,我还可以获得输入位置的lat/long位置,并将值冲击到其他表单字段中,这样它们就可以在后端保存,而无需另一个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);

现在,如果用户输入了Places无法识别的内容,我想清除lat和long字段。这就是我的问题所在:我如何发现这种情况的发生?我原以为google.maps.GeocoderStatus不正常会发出这种信号,但这些日志从未启动。事实上,在这种情况下,"inside-geocoder.geocode"消息也不会出现。

我已经看过了,但还没有发现google.maps在这种情况下可能会引发的事件。我可以在输入字段的blur事件上挂起一些东西,但我不确定它会做什么(输入字段中会有一些东西,只是无效的东西)。我曾想过要有一个信号量来跟踪地理编码器是否被调用,但我仍然需要检测"无效输入"状态,以捕捉用户首先输入有效内容,然后用无效内容替换的情况。

不管怎样:有什么想法吗?谢谢

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

place_change仅在用户从下拉列表中选择其中一个建议时才会触发。当地方图书馆不返回建议时,什么都不会发生。

由于自动完成根本无法访问建议(除非您选择一个),您可以通过自动完成服务请求建议(然后您可以检查是否有任何建议)。

您可以根据返回的建议(例如通过jQueryUI)自行实现自动完成功能