Uncaught TypeError: невозможно установить свойство 'position' из undefined

У меня есть этот код, дающий мне странное сообщение об ошибке

Uncaught TypeError: Cannot set property 'position' of undefined

Это внутренняя часть плагина jQuery для отображения карты google во всплывающем окне. Я использовал код где-то в другом месте, где он работал нормально - разница в том, что я теперь использую его в всплывающем окне. Я пропускаю проблему с областью или что-то еще? Все переменные, такие как geocoderParams и latlng, заполняются так, как должны. Ошибка при запуске сообщения об ошибке не принесла ничего ценного.

Сообщение об ошибке запускается при вызове 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()

Ответ 1

Я посмотрел google.maps.Map(), а ссылка Google говорит, что первым параметром должен быть mapDiv:Node, который является контейнером для карты и обычно является элементом div.

Вы передаете $(this), который, скорее всего, является объектом jQuery, который не соответствует ожиданиям Google. Я не знаю остальной части вашего кода, но, возможно, вам нужно просто передать this вместо $(this).

Ответ 2

Если вы используете jQuery, вам нужно передать vanilla HTMLElement (например, Node) вместо выбора jQuery (например, Array/NodeList), который возвращает запрос $().

если вы добавите консольную команду:

console.log(self);

он вернет что-то вроде:

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

чтобы получить значение из массива jQuery, замените:

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

с:

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

Ответ 3

Я столкнулся с этой ошибкой при попытке инициировать карту с чем-то вроде этого:

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

Мне удалось решить эту проблему, выбрав первый (и единственный) элемент, который возвращается селектором, добавив [0] после селектора:

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