37 Stimmen

Ungefangener Typfehler: Kann Eigenschaft 'position' von undefined nicht setzen

Ich habe diesen Code, der mir die seltsame Fehlermeldung gibt

Uncaught TypeError: Kann Eigenschaft 'position' von undefiniert nicht setzen

Das ist der Inhalt eines jQuery-Plugins, um eine Google-Karte in einem Popup anzuzeigen. Ich habe den Code woanders verwendet, wo er gut funktioniert hat - der einzige Unterschied hier scheint zu sein, dass ich ihn jetzt in einem Popup-Fenster benutze. Fehlt mir ein Scope-Problem oder so etwas? Alle Variablen wie geocoderParams und latlng sind richtig belegt. Die Google-Suche nach der Fehlermeldung ergab keinen wertvollen Hinweis.

Die Fehlermeldung wird ausgelöst, wenn google.maps.Map() aufgerufen wird.

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()

66voto

jfriend00 Punkte 632952

Ich habe google.maps.Map() und der Google-Referenz nachgeschlagen, in der steht, dass der erste Parameter ein mapDiv:Node sein sollte, der den Container für die Karte darstellt und in der Regel ein div-Element ist.

Du übergibst $(this), was wahrscheinlich ein jQuery-Objekt ist, was Google Maps nicht erwartet. Ich kenne den Rest deines Codes nicht, aber vielleicht solltest du einfach this anstelle von $(this) übergeben.

7 Stimmen

Wenn Sie einfach document.getElementById("my_div_id") übergeben, funktioniert es auch einwandfrei.

2 Stimmen

Es funktioniert auch, wenn Sie .get(0) zu Ihrem jQuery-Element hinzufügen.

0 Stimmen

@user1912899 - Es macht keinen Sinn, $(this).get(0) zu verwenden, wenn einfach nur this funktioniert. Warum ein jQuery-Objekt erstellen, wenn du es nicht brauchst?

31voto

rxgx Punkte 4968

Wenn Sie jQuery verwenden, müssen Sie das vanilla (z. B. Node) anstelle der jQuery-Auswahl (z. B. Array/NodeList) übergeben, die die Abfrage $() zurückgibt.

wenn Sie eine Konsolenbefehl hinzufügen:

console.log(self);

es wird etwas zurückgeben wie:

[   ]

um den Wert aus dem jQuery-Array zu erhalten, ersetzen Sie:

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

durch:

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

20voto

mattsoave Punkte 353

Ich bin auf diesen Fehler gestoßen, als ich versuchte, die Karte mit etwas Ähnlichem wie diesem zu initialisieren:

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

Ich konnte das Problem lösen, indem ich das erste (und einzige) Element auswähle, das der Selektor zurückgibt, indem ich [0] nach dem Selektor hinzufüge:

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

1 Stimmen

@mcflause dies ist kein seltsamer Hack, die $-Funktion gibt einfach eine Liste zurück, das [0] wählt den ersten aus.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X