2011-08-18 11 views
7

He buscado en todo Google una solución, pero parece una nueva. Estoy tratando de poner en práctica la API de Google Maps en un sitio sin embargo me siguen dando el siguiente error:Google Maps Issue ¿No se puede llamar al método 'apply' de undefined?

TypeError no detectada: No se puede llamar al método 'Aplicar' de la indefinida

Mi JS es el siguiente:

 var map; 
     function initialize(location) { 
      var mapDiv = document.getElementById('map-canvas'); 
      var latLng; 
      if (location == 0) { 
       latLng = new google.maps.LatLng(52.066356, 1.102388); 
      } 
      else if (location == 1) { 
       latLng = new google.maps.LatLng(52.672492, 1.232196); 
      } 
      else if (location == 2) { 
       latLng = new google.maps.LatLng(52.207607, 0.123017); 
      } 
      map = new google.maps.Map(mapDiv, { 
       center: latLng, 
       zoom: 14, 
       mapTypeId: google.maps.MapTypeId.ROADMAP 
      }); 

      google.maps.event.addDomListener(map, 'tilesloaded', addMarker(location)); 

     } 

     function addMarker(location) { 
      var latLng; 
      if (location == 0) { 
       latLng = new google.maps.LatLng(52.066703, 1.113573); 
      } 
      else if (location == 1) { 
       latLng = new google.maps.LatLng(52.672492, 1.232196); 
      } 
      else if (location == 2) { 
       latLng = new google.maps.LatLng(52.207607, 0.123017); 
      } 
      var marker = new google.maps.Marker({ 
       position: latLng, 
       map: map 
      }); 
     } 

     $(document).ready(function() { 
      initialize(0); 
     }); 
+0

Gracias por las respuestas chicos, no puedo creer que me perdí uno ;-) – Apqu

Respuesta

28

En esta línea

google.maps.event.addDomListener(map, 'tilesloaded', addMarker(location)); 

Usted está llamando a la función addMarker en lugar de pasarlo como una función de referencia. Por lo tanto, addMarker se ejecuta antes de que se defina el mapa. Intente cambiar esa línea a:

google.maps.event.addDomListener(map, 'tilesloaded', function() {addMarker(location)}); 
+1

consejo muy útil. En mi caso, tuve el mismo error, con respecto a addListenerOnce (map, 'bounds_changed') – user1576978

+1

Me sucedió también y se corrigió mediante el uso de la función en línea. tks –

6

El problema es que está invocando la función addMarker a la que debe proporcionar una devolución de llamada. Cambiar su llamada a la siguiente

google.maps.event.addDomListener(map, 'tilesloaded', function() { addMarker(location) }); 

Ahora mismo estás en vez de invocar directamente addMarker que devuelve ningún valor. Esto significa que está pasando con eficacia undefined a la API y la biblioteca de Google está golpeando el error al intentar invocar su devolución de llamada

Cuestiones relacionadas