【问题标题】:How to show info marker google maps when clicked in outside map?在外部地图中单击时如何显示信息标记谷歌地图?
【发布时间】:2013-06-22 13:58:30
【问题描述】:

在地图外点击时,我无法显示谷歌地图的信息。但是如果我点击标记时在地图内部,则可以显示谷歌地图的信息。

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>

无法显示...请给我解决办法??

【问题讨论】:

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


    【解决方案1】:

    您不能从链接中调用 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;
    
        }
    }
    

    【讨论】:

    • 我还是 javascript 程序的新手 :D。我是 vb.net 程序员。是的,这是真的,谢谢。 @fmt.Println.MKO
    【解决方案2】:

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

    还有一件事要确认,是否只有一个标记!如果有多个标记,则需要循环。

    希望这会有所帮助。

    【讨论】:

    • 文件hasil.xml里面有10条记录。我有这样的循环。 for ($i=0;$i&lt;10;$i++) { echo "&lt;a href='javascript:Linkclicked(.$i.)'&gt;try&lt;/a&gt;" } 无法显示....
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-12-11
    • 1970-01-01
    • 2019-05-17
    • 1970-01-01
    • 2023-03-30
    • 2018-02-24
    • 2013-09-13
    相关资源
    最近更新 更多