我有多个标记。
使用此代码点击每个标记时,我成功地能够打开信息框(是的,它在设置标记循环内)
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链接的部分并不是
答案 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'。