【问题标题】:Google Maps API V3 infowindow error: "infowindow not defined"Google Maps API V3 信息窗口错误:“信息窗口未定义”
【发布时间】:2012-07-02 22:26:06
【问题描述】:

我在名为markerList 的字典中有一个 Google Maps API 标记列表。所有这些都被放置在地图上。然后我创建了一个包含我所有infowindow 的数组。然后我需要为它们中的每一个设置addListener,这样当在地图上单击标记时,它将在正确的地图和信息窗口上调用infowindow.open

不幸的是,当我单击标记时,我在 firebug 控制台中收到以下错误:

infowindow is not defined

infowindow.open(map,infowindowList[window]);

这是我的代码:

 var infowindowList = {};

 for (var aMarker in markerList){
     infowindowList[aMarker] = new google.maps.InfoWindow({
          content: "This is a test!",
          size: new google.maps.Size(50,50)
     });

     console.log(infowindowList[aMarker]);
 }

 console.log("Done creating infowindowList...\n...Adding listeners");

 for (var window in infowindowList){
      google.maps.event.addListener(markerList[window], 'click', function() {
          // infowindow.open(map,infowindowList[window]); // wrong, see Edit
              infowindowList[window].open(map,markerList[window]);
      });
      console.log("added listener for window: ", infowindowList[window]);

 }

我认为这是因为在 google.maps.event.addListener(markerList[window]... 函数中,我将要在点击时运行的函数注册为 infowindow.open(map,infowindowList[window]),但该值 window 是本地的到函数,所以当我点击标记时,该函数不起作用,因为它不知道window 是什么。对吗?

编辑:正如 geocodezip 指出的那样,infowindow 不存在。所以我把它改成了infowindowList[window].open(map,markerList[window]);,也把最后一个参数改成了markerlist[window],因为它应该是一个作为arg的标记,而不是另一个信息窗口。

【问题讨论】:

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


    【解决方案1】:

    您收到错误“未定义信息窗口”,因为未定义信息窗口变量。它当然没有在您发布的代码中定义。

    通常它是全局定义的,因此有一个信息窗口(v2 默认行为),但在这种情况下,您仍然必须定义并创建它(通常在 onload 函数中)。

    working example

    【讨论】:

    • 好的,谢谢,所以我把那行改成infowindowList[window].open(map,markerList[window]);,但是现在,无论我点击哪个标记,它总是会在一个标记上方显示消息
    • @kalaracey 侦听器都重用了完成循环的相同window 变量,这就是它在最后一个标记上弹出的原因。请参阅this answer 中的addListener 函数包装器为window 创建一个新范围并为每个标记保存该值(将marker, i 替换为window)。您的代码编写方式最终会打开几个 InfoWindows,很可能您只想要一个,然后按照我链接的答案中的方法。
    • 那是因为循环结束后,window 的值总是相同的。这可以通过函数闭包来解决(如果您查看示例,createMarker 函数保存与函数闭包中的标记关联的信息窗口内容)。
    猜你喜欢
    • 2012-06-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-16
    • 2012-09-06
    相关资源
    最近更新 更多