按钮上的打开信息框点击“OUTSIDE”地图(谷歌地图v3)

时间:2012-04-19 10:40:51

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

我有多个标记。

使用此代码点击每个标记时,我成功地能够打开信息框(是的,它在设置标记循环内)

for (var i = 0; i < markers.length; i++) {
....
....
....
 google.maps.event.addListener(marker, "click", function () {
            //alert(this.html);
            infowindow.setContent(this.html);
            infowindow.open(map, this);
        });
}

上面的代码非常有效。

但现在我希望每个标记的信息框在地图外点击的按钮上打开。我在同一个循环中尝试了这个。

for (var i = 0; i < markers.length; i++) {
....
....
....
 var chandu = document.getElementById(i);
         google.maps.event.addDomListener(chandu, "click", function(){
            infowindow.setContent(this.html);
            infowindow.open(map, this);
            //alert("Yo");
         });
}

我有html按钮点击这样

    <a href="#" id="0">0</a>
    <a href="#" id="1">1</a>
    <a href="#" id="2">2</a>
    <a href="#" id="3">3</a>
    <a href="#" id="4">4</a>
    <a href="#" id="5">5</a>

但是这个点击html链接的部分并不是

2 个答案:

答案 0 :(得分:4)

我现在的工作解决方案看起来像这样

var chandu = document.getElementById(i);
chandu.onclick = generateTriggerCallback(marker,"click");

for循环中有一个函数

function generateTriggerCallback(object, eventType) {
            return function() {
                google.maps.event.trigger(object, eventType);
            };
        }

信用:在查看此示例http://gmaps-samples-v3.googlecode.com/svn/trunk/sidebar/random-markers.html

的源代码后,我想出了这个答案

答案 1 :(得分:1)

问题是你在处理超链接点击的代码中重复使用'this':

var chandu = document.getElementById(i);
         google.maps.event.addDomListener(chandu, "click", function(){
            infowindow.setContent(this.html);
            infowindow.open(map, this);
            //alert("Yo");
         });
}

第一个'this'是正确的 - this.html是超链接的HTML(不是标记)。 infowindow.open(map,this)中的第二个'this'是不正确的。在您的工作代码中,它引用标记。在非工作代码中,它引用了超链接。此对象在两行之间不会更改。你想要infowindow.open(map,this.id)而不是infowindow.open(map,this.id),因为你的a标签的id值与你的标记数组中的索引相同。

请注意,这是不正确的HTML,因为id属性不能以数字开头,它必须以字母开头。如果您尝试验证HTMl,则不会。你需要在id值上加一个字母前缀,也许是'm'。然后当你需要获取id值的子字符串时,剥掉你所拥有的'm'。