如何在外部地图中点击时显示信息标记谷歌地图?

时间:2013-06-22 13:58:31

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

我在显示谷歌地图信息时遇到问题,点击地图外部。但如果我在点击标记时在地图内部,则可以显示谷歌地图的信息。

function onload() {
    var st=getURLParameters("man");
    var kd_link=getURLParameters("kd");

if (window.XMLHttpRequest)
  {
  xmlhttp=new XMLHttpRequest();
  }
else
  {
  xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
  }
  var dt="";


xmlhttp.open("GET","hasil.xml",false);
xmlhttp.send();
xmlDoc=xmlhttp.responseXML; 


  var tbl=xmlDoc.documentElement.getElementsByTagName('page');

var map = new google.maps.Map(document.getElementById('map'), {
  zoom: 15,
  center: new google.maps.LatLng(-7.8711188835883945, 112.52471923828125),
  mapTypeId: google.maps.MapTypeId.ROADMAP //ROADMAP //HYBRID 

});

var infowindow = new google.maps.InfoWindow();
var gmarkers=[];
var marker, i;

  function Linkclicked(i) {
    GEvent.trigger(gmarkers[i], "click");
  }

var kde;var nm;var l1;var l2;var bk;
for (i = 0; i < tbl.length; i++) {  

kde=xmlDoc.getElementsByTagName("kode")[i].childNodes[0].nodeValue;
nm=xmlDoc.getElementsByTagName("nama")[i].childNodes[0].nodeValue;
l1=xmlDoc.getElementsByTagName("lat")[i].childNodes[0].nodeValue;
l2=xmlDoc.getElementsByTagName("long")[i].childNodes[0].nodeValue;
bk=xmlDoc.getElementsByTagName("bk")[i].childNodes[0].nodeValue; 

   marker = new google.maps.Marker({
position: new google.maps.LatLng(l1, l2),animation:an, icon:bk,map: map
  });

   google.maps.event.addListener(marker, 'click',(function(marker, i) {
    return function() {
      infowindow.setContent(xmlDoc.getElementsByTagName("nama")[i].childNodes[0].nodeValue);

      infowindow.open(map, marker);
                       }
  })(marker, i));

    gmarkers[i]=marker;

}
}

这是我的代码,当我尝试调用其中一个谷歌地图信息标记时。

<a href="javascript:Linkclicked('0')">try</a>

无法显示...请给我解决方案??

2 个答案:

答案 0 :(得分:0)

从您的代码Linkclicked('0')看起来您传递的是字符串作为参数。在Linkclicked() {}定义中你试图访问gmarkers [i],我不认为gmarkers索引是一个字符串。我认为这就是它不起作用的原因。

另一件事要确认,是否只有一个标记!如果有多个标记,那么你需要循环。

希望这有帮助。

答案 1 :(得分:0)

您无法通过链接调用LinkClicked函数,因为您在onload函数中定义了该函数。

如果您在Chrome浏览器中使用javascript控制台或使用firebug插件也在控制台的firefox浏览器中,您将看到未定义LinkClicked的错误,

所以,如果你改变你的代码,这个函数是通用的,那么gmarkers就可以了,

您的代码必须如下所示:

var gmarkers = [];

function Linkclicked(i) {
    google.maps.event.trigger(gmarkers[i], "click");
}

function onload() {
    var st = getURLParameters("man");
    var kd_link = getURLParameters("kd");

    if (window.XMLHttpRequest) {
        xmlhttp = new XMLHttpRequest();
    } else {
        xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
    }
    var dt = "";


    xmlhttp.open("GET", "return.xml", false);
    xmlhttp.send();
    xmlDoc = xmlhttp.responseXML;


    var tbl = xmlDoc.documentElement.getElementsByTagName('page');

    var map = new google.maps.Map(document.getElementById('map'), {
        zoom: 15,
        center: new google.maps.LatLng(-7.8711188835883945, 112.52471923828125),
        mapTypeId: google.maps.MapTypeId.ROADMAP //ROADMAP //HYBRID 

    });

    var infowindow = new google.maps.InfoWindow();
    var marker, i;

    var kde;
    var nm;
    var l1;
    var l2;
    var bk;
    for (i = 0; i < tbl.length; i++) {

        kde = xmlDoc.getElementsByTagName("kode")[i].childNodes[0].nodeValue;
        nm = xmlDoc.getElementsByTagName("nama")[i].childNodes[0].nodeValue;
        l1 = xmlDoc.getElementsByTagName("lat")[i].childNodes[0].nodeValue;
        l2 = xmlDoc.getElementsByTagName("long")[i].childNodes[0].nodeValue;
        bk = xmlDoc.getElementsByTagName("bk")[i].childNodes[0].nodeValue;

        marker = new google.maps.Marker({
            position: new google.maps.LatLng(l1, l2),
            animation: an,
            icon: bk,
            map: map
        });

        google.maps.event.addListener(marker, 'click', (function (marker, i) {
            return function () {
                infowindow.setContent(xmlDoc.getElementsByTagName("nama")[i].childNodes[0].nodeValue);

                infowindow.open(map, marker);
            }
        })(marker, i));

        gmarkers[i] = marker;

    }
}