2013-06-22 51 views
1

我有問題來顯示谷歌地圖的信息,當點擊地圖之外。但如果在地圖內部單擊標記時,Google地圖的信息可以顯示。如何在外部地圖中點擊時顯示info marker谷歌地圖?

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> 

它無法顯示...請給我解決方案?

回答

0

由於您在onload函數中定義了函數,因此無法從鏈接調用LinkClicked函數。

如果您在Chrome瀏覽器的JavaScript控制檯或Firefox瀏覽器的Firebug插件也控制檯使用,你會看到,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; 

    } 
} 
+0

我仍然新手:d。我是vb.net程序員。是的,這是真的,謝謝。 @ fmt.Println.MKO – Akbar

0

從你的代碼Linkclicked('0')看起來你傳遞一個字符串作爲參數。在Linkclicked() {}定義中,您嘗試訪問gmarkers [i],我不認爲gmarkkers索引是一個字符串。我認爲這是它不工作的原因。

另一件事要確認,是否只有一個標記!如果有多個標記,那麼你需要循環。

希望這會有所幫助。

+0

內部文件hasil.xml有10條。我有這樣的循環。 '爲($ I = 0; $ I <10; $ I ++){ 回波 「try」 }'在JavaScript程序 它不能顯示.... – Akbar