未捕获的TypeError:无法设置未定义的属性'infoWindow'

时间:2016-11-11 06:31:38

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

我正在尝试将旧映射中的一些代码合并到一个新映射中,并且我收到错误“Uncaught TypeError:无法设置未定义的属性'infoWindow'”引用此行

polygon.infoWindow = new google.maps.InfoWindow({content: html});

从下面的这个片段。我在脚本的顶部定义了infoWindow,但为了简洁起见,没有包含它。

geoXml.parseKmlString("<Placemark><name>"+name+"</name>"+kml+"</Placemark>");
       var html = "<strong>" + event + "</strong><br>Issued For: " + area + "<br>Expires: " +dtstring;
       var polygon = geoXml.docs[0].gpolygons[0];
       polygon.infoWindow = new google.maps.InfoWindow({content: html});

       google.maps.event.addListener(polygon, 'mouseover', function(e) {
             var latLng = e.latLng;
                 this.setOptions({fillOpacity:0.80});
                 polygon.infoWindow.setPosition(latLng);
                 polygon.infoWindow.open(map);
        });

1 个答案:

答案 0 :(得分:1)

如果你看my example(看起来像你的代码来自哪里),你会看到同样的错误(我已经修复了这个例子)。当查询返回的FusionTable中的条目不包含多边形时,会发生这种情况。我的例子中的条目是:

  

活动:特殊天气声明,截止日期:2013-05-02T18:00:00-06:00

如果没有多边形,你可以防御性编码以不创建infowindow:

<asp:DropDownList ID="AttendStatusAllDropDownList" runat="server">
    <asp:ListItem Value="" Text=""></asp:ListItem>
    <asp:ListItem Value="TM005" Text="Time Missed 005 Min"></asp:ListItem>
    <asp:ListItem Value="TM010" Text="Time Missed 010 Min"></asp:ListItem>
    <asp:ListItem Value="TM015" Text="Time Missed 015 Min"></asp:ListItem>
    <asp:ListItem Value="TM030" Text="Time Missed 030 Min"></asp:ListItem>
    <asp:ListItem Value="TM045" Text="Time Missed 045 Min"></asp:ListItem>
</asp:DropDownList>
<br />
<asp:Button ID="Button1" runat="server" Text="Button" OnClick="ApplyToAllButton_Click" CausesValidation="false" />
<br />
<br />
<asp:Repeater ID="AttendanceRepeater" runat="server">
    <ItemTemplate>
        <asp:DropDownList ID="AttendStatusDropDownList" runat="server">
            <asp:ListItem Value="" Text=""></asp:ListItem>
            <asp:ListItem Value="TM005" Text="Time Missed 005 Min"></asp:ListItem>
            <asp:ListItem Value="TM010" Text="Time Missed 010 Min"></asp:ListItem>
            <asp:ListItem Value="TM015" Text="Time Missed 015 Min"></asp:ListItem>
            <asp:ListItem Value="TM030" Text="Time Missed 030 Min"></asp:ListItem>
            <asp:ListItem Value="TM045" Text="Time Missed 045 Min"></asp:ListItem>
        </asp:DropDownList><br />
    </ItemTemplate>
</asp:Repeater>