0

サイトに問題があります。フォームに送信する前に、オートコンプリートを使用して住所の緯度を検索します。問題は、2つのインスタンスがあるページで、Chromeで「'geometry'がnullであるか、オブジェクトではありません」というエラーが発生し、最初のインスタンスがlatlonを取得しないことです。

if($('input#searchArea').length){
        var input = document.getElementById('searchArea');
        var options = {
            componentRestrictions: {country: 'uk'}
        }
        var autocomplete = new google.maps.places.Autocomplete(input, options);

        google.maps.event.addListener(autocomplete, 'place_changed', function(){
            var place = autocomplete.getPlace();
            var location = String(place.geometry.location); // The problemed line
            var latLong = location.substr(1, location.length-2);
            latLong = latLong.split(', ');
            if($('input#searchLatLong').length == 0) $('form#findArea').append('<input type="hidden" name="ll" id="searchLatLong" />');
            $('input#searchLatLong').val(latLong[0] + ',' + latLong[1]);
        });
    }

    if($('input#letArea').length){
        var input = document.getElementById('letArea');
        var options = {
            componentRestrictions: {country: 'uk'}
        }
        autocomplete = new google.maps.places.Autocomplete(input, options);

        google.maps.event.addListener(autocomplete, 'place_changed', function(){
            var place = autocomplete.getPlace();
            var location = String(place.geometry.location);
            var latLong = location.substr(1, location.length-2);
            latLong = latLong.split(', ');
            if($('input#letLatLong').length == 0) $('form#letPlaceArea').append('<input type="hidden" name="ll" id="letLatLong" />');
            $('input#letLatLong').val(latLong[0] + ',' + latLong[1]);
        });
    }

誰かがこれに遭遇したことがありますか?

乾杯、RJ

編集:問題が見つかりました。同じ名前の変数でした。2番目のインスタンスでそれらを変更すると、ソートされます。

乾杯、RJ

4

3 に答える 3

3

問題が見つかりました。同じ名前の変数でした。2番目のインスタンスでそれらを変更すると、ソートされます。

于 2012-08-27T13:06:23.697 に答える
3

これがこの問題を解決するための最良の方法であるかどうかはわかりませんが、私はこれを行いました:

function initialize() {
    var input = document.getElementById('searchTextField');
    var options = {
        types: ['(cities)']
    };
    var autocomplete = new google.maps.places.Autocomplete(input, options);
    }
    google.maps.event.addDomListener(window, 'load', initialize);


function initialize1() {
    var input = document.getElementById('searchTextFieldedit');
    var options = {
        types: ['(cities)']
    };
    var autocomplete = new google.maps.places.Autocomplete(input, options);
    }
    google.maps.event.addDomListener(window, 'load', initialize1);

よろしくお願いいたします。

于 2014-10-08T20:55:17.017 に答える
0
function initialize(pre) {
  window[pre+"autocomplete"] = new google.maps.places.Autocomplete(
      (document.getElementById(pre+'street_address')),
      { types: ['geocode'] });
  google.maps.event.addListener(window[pre+"autocomplete"], 'place_changed', function() {
    fillInAddress(pre);
  });
}

function fillInAddress(pre) {

    var place = window[pre+"autocomplete"].getPlace();

    for (var component in componentForm) {
      document.getElementById(pre+component).value = '';
      document.getElementById(pre+component).disabled = false;
    }

    for (var i = 0; i < place.address_components.length; i++) {
        var addressType = place.address_components[i].types[0];
        if (componentForm[addressType]) {
          var val = place.address_components[i][componentForm[addressType]];
          jQuery("#"+pre+addressType).val(val);
        }
    }
    updateStreet("#"+pre)
}

そしてもちろん、jQueryまたはonload()のいずれかを介して2回開始する必要があります。

jQuery(function() {
  initialize("foo_")
  initialize("bar_")
});
于 2015-03-26T18:59:26.633 に答える