【问题标题】:Uncaught TypeError: Cannot set property 'position' of undefined未捕获的类型错误:无法设置未定义的属性“位置”
【发布时间】:2012-01-18 23:03:45
【问题描述】:

我有这段代码给了我奇怪的错误信息

Uncaught TypeError: Cannot set property 'position' of undefined

这是一个 jQuery 插件的内部,用于在弹出窗口中显示谷歌地图。 我在其他地方使用了代码,它工作得很好——这里唯一的区别似乎是我现在在弹出窗口中使用它。我错过了范围问题还是什么? 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()

【问题讨论】:

    标签: javascript google-maps google-maps-api-3 coffeescript


    【解决方案1】:

    我查了google.maps.Map(),Google reference 说第一个参数应该是mapDiv:Node,它是地图的容器,通常是div 元素。

    您正在传递$(this),这可能是一个 jQuery 对象,这不是 Google 地图所期望的。我不知道您的其余代码,但也许您应该传递 this 而不是 $(this)。

    【讨论】:

    • 如果你只是传递一个 document.getElementById("my_div_id") 它也可以正常工作。
    • 如果你将 .get(0) 添加到你的 jQuery 元素中,它也可以工作。
    • @user1912899 - 当简单的this 工作时,做$(this).get(0) 毫无意义。为什么要创建一个你不需要的 jQuery 对象?
    【解决方案2】:

    如果您使用 jQuery,则需要传递原版 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);
      

      【讨论】:

      • @mcflause 这并不奇怪,$ 函数只是返回一个列表,[0] 选择第一个
      猜你喜欢
      • 1970-01-01
      • 2022-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-09
      • 2017-03-30
      • 2011-03-11
      相关资源
      最近更新 更多