2015-04-14 3 views
-1

Мне нужно разместить на карте несколько маркеров с возможностью щелчка по ним. Это должно затем запустить определенные JS внутри моего сайта, и для этого я использую следующий код:Google maps api marker не определен error

function initialize() { 
     geocoder = new google.maps.Geocoder(); 
     var mapCanvas = document.getElementById('map_canvas'); 
     var mapOptions = { 
      center: new google.maps.LatLng(64.113598, -21.8569031), 
      zoom: 12, 
      scrollwheel: false, 
      mapTypeId: google.maps.MapTypeId.ROADMAP 
     } 
     var map = new google.maps.Map(mapCanvas, mapOptions) 

     function getAddress (address) { 
      geocoder.geocode({ 'address': address}, function(results, status) { 
      if (status == google.maps.GeocoderStatus.OK) { 
       map.setCenter(results[0].geometry.location); 
       var marker = new google.maps.Marker({ 
       map: map, 
       position: results[0].geometry.location 
       }); 
      } else { 
       return; 
      } 
      }); 
     } 

     getAddress("some address here"); 

     } 
     google.maps.event.addListener(marker, 'click', function() { 
     map.setZoom(8); 
     }); 
     google.maps.event.addDomListener(window, 'load', initialize); 

Но это дает мне Uncaught ReferenceError: marker is not defined ошибку. Что я делаю не так?

+1

Если 'статус = google.maps.GeocoderStatus.OK' то' marker' не будет получать инициализирован. Не могли бы вы посмотреть на это? –

+0

@TimBiegeleisen да, но он инициализируется, у меня есть маркер на моей карте. – Xeen

ответ

1

Вы определили var marker внутри функции getAddress, и поэтому эта переменная будет доступна только в этой области. Пожалуйста, переместите определение переменной вне getAddress как это:

var marker; 

function initialize() { 
    // ... 

    function getAddress (address) { 
     geocoder.geocode({ 'address': address}, function(results, status) { 
      if (status == google.maps.GeocoderStatus.OK) { 
       map.setCenter(results[0].geometry.location); 
       marker = new google.maps.Marker({ 
        map: map, 
        position: results[0].geometry.location 
       }); 
      } else { 
       return; 
      } 
     }); 
    } 

    getAddress("some address here"); 
} 
+0

Спасибо, но это, похоже, не исправить. – Xeen

+0

Пройдите через отладчик Chrome и проверьте значение 'marker' прямо перед вызовом' addListener'. –

+0

Хорошо, теперь я получаю 'Can not read property '__e3_' undefined' :), который, насколько я понимаю, связан с тем, что слушатель вызывается внутри метода initialize (что в моем случае не так)./исправил его, и теперь все работает, спасибо большое! – Xeen