2010-06-19 83 views
0

我的第一個問題在這裏。我通過從外部php文件中獲取json對象的數據來構建Google地圖,在那裏獲取餐館列表(在此情況下爲4家餐館)及其信息,並且通過此信息在地圖上構建標記然後顯示的餐館列表,當我點擊餐廳的名字應該顯示它在地圖上,從標記,而這種功能無法正常工作,這裏是代碼:在谷歌地圖JavaScript的點擊功能不起作用

$(document).ready(function(){ 
    $.ajax({ 
     type:"GET", 
     url:"proxy.php", 
     dataType:"json", 
     contentType:"text/json", 
     success:function(res){ 
      $.post('getinfo.php', {data: res}, function(data){ 

       response = jQuery.parseJSON(data); 
       if (GBrowserIsCompatible()) { 
        var map = new GMap2(document.getElementById("google_map_div")); 
        map.addControl(new GLargeMapControl()); 
        map.addControl(new GMapTypeControl()); 
        map.setCenter(new GLatLng(0,0),0); 

        var side_bar_html = ""; 
        var gmarkers = []; 
        var htmls = []; 
        var i = 0; 

        function createMarker(point,name,html) { 
         var marker = new GMarker(point); 
         GEvent.addListener(marker, "click", function() { 
          marker.openInfoWindowHtml(html); 
         }); 
         gmarkers[i] = marker; 
         htmls[i] = html; 
         side_bar_html += '<a href="javascript:openInsideMap(' + i + ')">' + name + '</a><br>'; 
         return marker; 
         // 
        } 

        function openInsideMap(i){ 
         alert("WORKING" + i); 
         gmarkers[i].openInfoWindowHtml(htmls[i]); 
        } 

        var bounds = new GLatLngBounds(); 

        for(i=0; i<response.length;i++){ 
         var j = i + 1; 
         // obtain the attribues of each marker 
         var lat = parseFloat(response[i].langt); 
         var lng = parseFloat(response[i].longt); 
         var point = new GLatLng(lat,lng); 
         var html = response[i].localName + ": " + response[i].localAddress; 
         if(response[i].tapaName == ''){ 
          var label = j + ". " + response[i].localName + " - " + response[i].localAddress; 
         }else{ 
          var label = j + ". " + response[i].localName + " - " + response[i].localAddress + "<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;" + response[i].tapaName; 
         } 
         // create the marker 
         var marker = createMarker(point,label,html); 
         map.addOverlay(marker); 

         // ==== Each time a point is found, extent the bounds ato include it ===== 
         bounds.extend(point); 

        } 

        document.getElementById("side_bar").innerHTML = side_bar_html; 
        map.setZoom(map.getBoundsZoomLevel(bounds)); 
        map.setCenter(bounds.getCenter()); 
       } 

      }); 
     } 
    }); 

當我瀏覽它Mozilla或GCHROME,它說,功能openInsideMap(我){沒有定義 openInsideMap沒有定義

非常感謝你的幫助, 和鏈接檢查它的是:01

function(data){ 
       response = jQuery.parseJSON(data); 

您可以通過使用一個事件監聽器,而不是一個javascript URL的解決這個問題:http://www.gsi.dec.usc.es/santiagoetapas/testStage.php

回答

0

openInsideMap僅在啓動該匿名函數定義。例如,假設document.getElementById("side_bar")最初有沒有孩子:

function createMarker(point,name,html) { 
         var marker = new GMarker(point); 
         GEvent.addListener(marker, "click", function() { 
          marker.openInfoWindowHtml(html); 
         }); 
         gmarkers[i] = marker; 
         htmls[i] = html; 
         var newLink = document.createElement("a"); 
         newLink.addEventListener("click", 
         (function(i) 
         { 
         return function() 
         { 
          openInsideMap(i); 
         }; 
         })(i), false); 
         document.getElementById("side_bar").appendChild(newLink); 
         return marker; 
         // 
        } 

現在openInsideMap將被關閉匿名功能是必要的,所以你並不總是得到最新的i

,然後取下:

document.getElementById("side_bar").innerHTML = side_bar_html; 
+0

實際上,這是我正在使用的谷歌地圖數據: 哪些函數(數據)。 我試圖把函數openInsideMap(i)放在ajax函數之外,但它仍然說函數undefined。 而且,我需要'我'知道我正在推送哪個餐廳,以便將它傳遞給地圖標記 – Jasur 2010-06-19 19:37:38

+0

現在側欄已經消失,它不顯示任何內容,因爲我放 newLink.innerText = name ; var newLink = document.createElement(「a」); – Jasur 2010-06-19 20:28:57

+0

有沒有任何方法讓.ajax和$ .post,因爲我把緯度,登錄自己,而不是從JSON文件,它正在工作,但如果我只舉例$(document).ready()他們,它不起作用... – Jasur 2010-06-19 23:09:54

0

非常感謝馬修, 我想你告訴我,但它沒有工作,所以我讀了一些關於在JavaScript全局和局部變量,然後,我解決了這個問題,首先,取出:

  • $(文件)。就緒

然後,我把功能開放InsideMap(ⅰ);在ajax之外,並且還把這個函數中使用的變量放在ajax之外

  • var gmarkers = [];

  • var htmls = [];

而且它工作得很好。您可以通過鏈接查詢:www.gsi.dec.usc.es/santiagoetapas/testStage.php