Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/google-maps/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 标记内容(信息窗口)谷歌地图_Javascript_Google Maps_Google Maps Markers_Infowindow - Fatal编程技术网

Javascript 标记内容(信息窗口)谷歌地图

Javascript 标记内容(信息窗口)谷歌地图,javascript,google-maps,google-maps-markers,infowindow,Javascript,Google Maps,Google Maps Markers,Infowindow,我正在尝试将infoWindow添加到Google地图上的多个标记中。我最近的一次尝试是获得一个信息窗口,在所有标记上显示您在数组中可以看到的最后一个地址。我在下面粘贴的代码位不起作用,我得到一个“UncaughtTypeError:无法读取未定义的属性“4”。我确信这是一个范围问题,但我在这里兜圈子,需要一些帮助: var hotels = [ ['ibis Birmingham Airport', 52.452656, -1.730548, 4, 'Ambassado

我正在尝试将infoWindow添加到Google地图上的多个标记中。我最近的一次尝试是获得一个信息窗口,在所有标记上显示您在数组中可以看到的最后一个地址。我在下面粘贴的代码位不起作用,我得到一个“UncaughtTypeError:无法读取未定义的属性“4”。我确信这是一个范围问题,但我在这里兜圈子,需要一些帮助:

var hotels = [
            ['ibis Birmingham Airport', 52.452656, -1.730548, 4, 'Ambassador Road<br />Bickenhill<br />Solihull<br />Birmingham<br />B26 3AW','(+44)1217805800','(+44)1217805810','info@ibisbhamairport.com','http://www.booknowaddress.com'],
            ['ETAP Birmingham Airport', 52.452527, -1.731644, 3, 'Ambassador Road<br />Bickenhill<br />Solihull<br />Birmingham<br />B26 3QL','(+44)1217805858','(+44)1217805860','info@etapbhamairport.com','http://www.booknowaddress.com'],
            ['ibis Birmingham City Centre', 52.475162, -1.897208, 2, 'Ladywell Walk<br />Birmingham<br />B5 4ST','(+44)1216226010','(+44)1216226020','info@ibisbhamcity.com','http://www.booknowaddress.com']
        ];

        for (var i = 0; i < hotels.length; i++) {
            var marker = new google.maps.Marker({
                position: new google.maps.LatLng(hotels[i][1], hotels[i][2]),
                map: map,
                icon: image,
                title: hotels[i][0],
                zIndex: hotels[i][2]
            });

            var infoWindow = new google.maps.InfoWindow();

            google.maps.event.addListener(marker, 'click', function () {
                var markerContent = hotels[i][4];
                infoWindow.setContent(markerContent);
                infoWindow.open(map, this);
            });
        }
var酒店=[
[伯明翰宜必思机场,52.452656,-1.730548,4,'大使路
比肯希尔
索利哈尔
伯明翰
B26 3AW','(+44)1217805800','(+44)1217805810','info@ibisbhamairport.com','http://www.booknowaddress.com'], [ETAP伯明翰机场,52.452527,-1.731644,3,'大使路
比肯希尔
索利哈尔
伯明翰
B26 3QL','(+44)1217805858','(+44)1217805860','info@etapbhamairport.com','http://www.booknowaddress.com'], [伯明翰市中心宜必思酒店,52.475162,-1.897208,2,'伯明翰夫人大道
B5 4ST','(+44)1216226010','(+44)1216226020','info@ibisbhamcity.com','http://www.booknowaddress.com'] ]; 对于(变量i=0;i

非常感谢您的期待。

我们已经解决了这个问题,尽管我们认为在for之外使用addListener不会有任何区别,但似乎是这样的。答案如下:

使用信息窗口中的信息创建一个新函数:

function addInfoWindow(marker, message) {

            var infoWindow = new google.maps.InfoWindow({
                content: message
            });

            google.maps.event.addListener(marker, 'click', function () {
                infoWindow.open(map, marker);
            });
        }
然后使用要创建的数组ID和标记调用函数:

addInfoWindow(marker, hotels[i][3]);

虽然这个问题已经得到了回答,但我认为这种方法更好: 有关StackOverFlow的问题摘录:

每个标记都会获得一个“信息窗口”条目:


我看了很多关于这个问题的答案。你的回答是最清楚的。谢谢你。@DarrylGodden。。。谢谢有关infowindow的信息。info变量的用途是什么?注意:最初无法工作的原因是您正在创建一个事件侦听器回调,该回调将具有不同的作用域。虽然它正在生成一个具体的“i”,但我怀疑它仍然试图从回调函数访问“hotels”,但由于hotel是一个“var”,因此只能在父函数中访问它。+1这非常有效!!您不能使用infowindow的自定义属性初始化它,但显然您可以创建“infowindow”键。。。很高兴它起作用了。谢谢我们可以自定义工具提示的样式吗?@SachinHR:see没有尝试,但您可以在内容中插入任何样式化的HTML,并使用CSS设置样式。您可以更改带有标记的图标。请参见是否可以在悬停时显示该特定标记的图片和名称?
function createMarker(lat, lon, html) {
    var newmarker = new google.maps.Marker({
        position: new google.maps.LatLng(lat, lon),
        map: map,
        title: html
    });

    newmarker['infowindow'] = new google.maps.InfoWindow({
            content: html
        });

    google.maps.event.addListener(newmarker, 'mouseover', function() {
        this['infowindow'].open(map, this);
    });
}