2011-12-13 22 views
37

tengo este código me da el mensaje de error extrañoTypeError no detectada: No se puede establecer la propiedad 'position' de la indefinida

Uncaught TypeError: Cannot set property 'position' of undefined 

Este es el interior de un plugin de jQuery para mostrar un mapa de Google en una ventana emergente. Estaba usando el código en otro lugar, donde funcionó bien; la única diferencia aquí parece ser que ahora lo estoy usando en una ventana emergente. ¿Me estoy perdiendo un problema de alcance o algo? Todas las variables como geocoderParams y latlng se llenan como deberían. Google buscando el mensaje de error resultó nada valioso.

El mensaje de error se activa cuando se llama al google.maps.Map().

self = $(this) 
self.hide() 

geocoder = new google.maps.Geocoder 
geocoderParams = 
    address: self.data('address') || settings.address 
    region: settings.region 

results = geocoder.geocode geocoderParams, (results, status) -> 

if status == google.maps.GeocoderStatus.OK 
    latlng = results[0].geometry.location 

    mapOptions = 
    mapTypeControl: false 
    overviewMapControl: false 
    zoom: settings.zoomLevel 
    center: latlng 
    mapTypeId: google.maps.MapTypeId.ROADMAP 

    map = new google.maps.Map(self, mapOptions) 

self.show() 

Respuesta

66

Miré hacia arriba y la google.maps.Map()Google reference dice que el primer parámetro debe ser un mapDiv:Node que es el contenedor para el mapa y es típicamente un elemento div.

Usted está pasando $(this) que es probable que sea un objeto jQuery que no es lo que Google maps está esperando. No sé el resto de su código, pero tal vez debería estar pasando this en lugar de $(this).

+7

Si acaba de pasarle un document.getElementById ("my_div_id") también funciona bien. – Avishai

+2

También funciona si agrega .get (0) a su elemento jQuery. –

+0

@ user1912899 -no tiene sentido hacer '$ (this) .get (0)' cuando simplemente 'this' funciona. ¿Por qué crear un objeto jQuery que no lo necesita? – jfriend00

31

Si estás usando jQuery, que necesita para aprobar la vainilla HTMLElement (por ejemplo Node) en lugar de la selección jQuery (por ejemplo Array/NodeList) que los $() devuelve la consulta.

si se agrega un comando de consola:

console.log(self); 

devolverá algo como:

[ ▶ <div id="map_canvas"></div> ] 

para obtener el valor de la matriz de jQuery, sustituya:

map = new google.maps.Map(self, mapOptions) 

con :

map = new google.maps.Map(self[0], mapOptions) 
19

me encontré con este error al intentar iniciar el mapa con algo como esto:

map = new google.maps.Map($('#map-canvas'), mapOptions); 

yo era capaz de resolverlo mediante la selección del primer elemento (y única) que el selector rendimientos mediante la adición de [0] después de la selector:

+1

@mcflause esto no es raro, la función $ devuelve una lista, el [0] selecciona el primero –

Cuestiones relacionadas