在按钮上打开信息框点击“外部”地图(谷歌地图v3)

问题描述:

我有多个标记。在按钮上打开信息框点击“外部”地图(谷歌地图v3)

我使用该代码的每一标志点击后能够成功地OPENINFO箱(是其设置标记的环内)

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链接部分的不woork

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

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

+0

+1正是我需要的。 ;-) – 2013-11-07 16:54:14

的问题是,你打算重用的“本”在你的代码来处理的超级链接点击:

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

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

请注意,这是错误的HTML,因为id属性不能以数字开头,所以它必须以字母开头。如果你试图验证你的HTMl,它不会。你需要在ID值上加一个字母前缀,也许是'm'。然后,当你需要采用id值的子字符串时,剥离你所拥有的'm'。

+0

是的,经过很多console.log,昨天我意识到我在用“this”所犯的错误。并感谢有关id属性的信息(尽管现在它可以在id中首先开始的数字)。我将该解决方案作为答案发布。 – cjmling 2012-04-20 04:02:48