【问题标题】:Google Maps API--Can't get info window data to load properlyGoogle Maps API - 无法正确加载信息窗口数据
【发布时间】:2008-12-13 03:02:44
【问题描述】:

我有这段代码可以生成我希望可以通过弹出信息窗口点击的市场。

for (i = 0; i < marker_array.length; i++) {
    var point = new GLatLng(marker_array[i][0], marker_array[i][1]);
    var marker = new GMarker(point, markerOptions);

    GEvent.addListener(marker, "click", function() {
        marker.openInfoWindowHtml(html_data);
        });
    map.addOverlay(marker);
    }

问题是只有一个市场最终可以点击。无论点击哪一个,带有一个可点击标记数据的信息窗口都会在该可点击标记上方弹出。所有标记都加载并位于正确的位置,因此问题仅在于为每个标记显示弹出窗口数据。

我已经查看了有关“展开”标记函数 here 的部分,这似乎是我出错的地方,但我无法通过测试他们建议的更改来使其工作.

【问题讨论】:

  • html_data的来源是什么?您是否打算让每个标记都相同?因为这就是您的示例的工作方式。

标签: javascript google-maps openinfowindowhtml


【解决方案1】:

我相信您的问题是变量 html_data 对于此循环的所有迭代都是相同的。您应该在循环中每次遍历时更新该变量,以使值不同。

【讨论】:

    【解决方案2】:

    我不太确定我是否关注,但你是说所有弹出窗口中的数据都相同吗?

    我认为这是问题所在,这是因为事件侦听器的工作方式。当单击功能发生时,它会评估侦听器事件。所以你显示的 HTML 总是一样的,因为变量总是被重写。

    【讨论】:

    • 弹出窗口仅在其中一个标记上生成。换句话说:当我点击 m1 时,m2 数据出现在 m2 上,当我点击 m2 时,m2 数据出现在 m2 上。
    【解决方案3】:

    我使用了一个与我的 HTML 标记数据相匹配的数组,它运行良好:

    function createMarker(posn, title, icon, i) {
        var marker = new GMarker(posn, {title: title, icon: icon, draggable:false});
        GEvent.addListener(marker, 'mouseover', function() { 
            map.closeInfoWindow()
            marker.openInfoWindowHtml(infoText[i])
    
         } );   
        return marker;
    }
    

    【讨论】:

      【解决方案4】:

      我发现了同样的情况,我有解决这个问题的办法。我建议您创建一个扩展 Marker 类的自定义类。在这个自定义类中,您应该为您的数据创建一个具有参数的构造函数,并且该类还应该有自己的信息窗口变量,该变量将从您的主应用程序中调用。例如:

      自定义类:

      public class StoreSpot extends Marker
      {  
          public var infoWindow:InfoWindowOptions;
          public var store_id:String;
          public var address:String;
          public var name:String;
          ...
      }
      

      主要应用:

      tempMarker = new StoreSpot(
          tempLatlng,
          new MarkerOptions({
              icon:new spotStore(), 
              iconAlignment:MarkerOptions.ALIGN_HORIZONTAL_CENTER,
              iconOffset:new Point(0,-50)
          }),
          temp.store_id,
          temp.name,
          temp.address,
          temp.detail
      );
      

      这样您可以为不同的标记放置不同的信息窗口。希望这对你有用。在此处输入代码。

      【讨论】:

        猜你喜欢
        • 2014-10-16
        • 1970-01-01
        • 2020-12-06
        • 2011-08-08
        • 1970-01-01
        • 2019-03-14
        • 2014-02-18
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多