2

我有多个标记。

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

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 链接部分的点击不起作用

4

2 回答 2

4

The working solution I have now looks something like this

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

And there is a function out of the for loop

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

Credit: I come up with this answer after looking into the source code of this sample http://gmaps-samples-v3.googlecode.com/svn/trunk/sidebar/random-markers.html

于 2012-04-20T04:16:09.763 回答
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”不正确。在您的工作代码中, this 引用了标记。在您的非工作代码中, this 引用了超链接。this 对象在两行之间没有变化。您需要 infowindow.open(map, this.id) 而不是 infowindow.open(map, this),因为您的 a 标签的 id 值与标记数组中的索引相同。

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

于 2012-04-19T13:39:57.317 回答