2011-12-13 11 views
37

ho questo codice mi dà il messaggio di errore stranoTypeError Uncaught: impossibile impostare 'posizione' di proprietà del non definito

Uncaught TypeError: Cannot set property 'position' of undefined 

Questa è l'interno di un plugin jQuery di mostrare la mappa di google in un pop-up. Stavo usando il codice da qualche altra parte, dove ha funzionato bene - l'unica differenza sembra essere che ora la sto usando in una finestra Popup. Mi manca un problema di ambito o qualcosa del genere? Tutte le variabili come geocoderParams e latlng sono riempite come dovrebbero. Cercare su google il messaggio di errore non ha funzionato.

Il messaggio di errore viene generato quando viene chiamato 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() 

risposta

66

ho guardato google.maps.Map() e la Google reference dice che il primo parametro deve essere un mapDiv:Node che è il contenitore per la carta ed è tipicamente un elemento div.

Si sta passando a $(this) che è probabilmente un oggetto jQuery che non è quello che le mappe di Google si aspettano. Non conosco il resto del codice, ma forse dovresti passare semplicemente this anziché $(this).

+7

Se si passa solo un documento.getElementById ("my_div_id") funziona anche bene. – Avishai

+2

Funziona anche se aggiungi .get (0) al tuo elemento jQuery. –

+0

@ user1912899 -no punto nel fare '$ (this) .get (0)' quando semplicemente 'questo' funziona. Perché creare un oggetto jQuery che non ti serve? – jfriend00

31

Se stai usando jQuery, è necessario passare la vaniglia HTMLElement (ad esempio Node) al posto della selezione jQuery (ad esempio Array/NodeList) che le $() restituisce la query.

se si aggiunge un comando console:

console.log(self); 

tornerà qualcosa come:

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

per ottenere il valore dalla matrice jQuery, sostituire:

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

con :

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

ho incontrato questo errore quando si cerca di avviare la mappa con qualcosa di simile:

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

sono stato in grado di risolverlo selezionando la prima voce (e solo) che il selettore ritorna aggiungendo [0] dopo la selettore:

+1

@mcflause questo non è un trucco strano, la funzione $ restituisce solo una lista, il [0] seleziona il primo –

Problemi correlati