2010-06-19 140 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