2010-09-10 92 views
0

我正在使用v3 API并尝试重新创建商店定位器样本(这是v2)。我喜欢v2版本的工作方式,而v3 API的相同文章已更改。我有一切例外:当我点击位置结果时,它不会在地图上打开该位置的标记。这是我的代码。我认为问题存在于CreateSidebarEntry()函数中。任何帮助将不胜感激! (你可以在这里看到它的动作:http://www.webworksct.net/clients/ccparking/partners3.php - 只需在搜索框中输入“orlando”,然后单击搜索以获得结果,然后单击右侧列表中的某个位置......没有任何反应)。无法在边栏列表中打开Goog​​le地图标记

//<![CDATA[ 
    var map; 
    var markers = []; 
    var infoWindow; 
var sidebar; 
    //var locationSelect; 

    function load() { 
     map = new google.maps.Map(document.getElementById("map"), { 
     center: new google.maps.LatLng(40, -100), 
     zoom: 4, 
     mapTypeId: 'roadmap', 
     mapTypeControlOptions: {style: google.maps.MapTypeControlStyle.DEFAULT} 
     }); 
     infoWindow = new google.maps.InfoWindow(); 

    sidebar = document.getElementById("sidebar"); 

    } 

    function searchLocations() { 
    var address = document.getElementById("addressInput").value; 
    var geocoder = new google.maps.Geocoder(); 
    geocoder.geocode({address: address}, function(results, status) { 
     if (status == google.maps.GeocoderStatus.OK) { 
     searchLocationsNear(results[0].geometry.location); 
     } else { 
     alert(address + ' not found'); 
     } 
    }); 
    } 

    function clearLocations() { 
    infoWindow.close(); 
    for (var i = 0; i < markers.length; i++) { 
     markers[i].setMap(null); 
    } 
    markers.length = 0; 
    sidebar.innerHTML = ""; 
    } 

    function searchLocationsNear(center) { 
    clearLocations(); 

    var radius = document.getElementById('radiusSelect').value; 
    var searchUrl = 'phpsqlsearch_genxml.php?lat=' + center.lat() + '&lng=' + center.lng() + '&radius=' + radius; 
    downloadUrl(searchUrl, function(data) { 
     var xml = parseXml(data); 
     var markerNodes = xml.documentElement.getElementsByTagName("marker"); 
     var bounds = new google.maps.LatLngBounds(); 

    var sidebar = document.getElementById('sidebar'); 
     sidebar.innerHTML = ''; 
     if (markerNodes.length == 0) { 
     sidebar.innerHTML = 'No results found.'; 
     map.setCenter(new google.maps.LatLng(40, -100), 4); 
     return; 
     } 

    for (var i = 0; i < markerNodes.length; i++) { 
     var name = markerNodes[i].getAttribute("name"); 
     var address = markerNodes[i].getAttribute("address"); 
     var distance = parseFloat(markerNodes[i].getAttribute("distance")); 
     var latlng = new google.maps.LatLng(
       parseFloat(markerNodes[i].getAttribute("lat")), 
       parseFloat(markerNodes[i].getAttribute("lng"))); 

     var marker = createMarker(latlng, name, address); 
     bounds.extend(latlng); 

    var sidebarEntry = createSidebarEntry(marker, name, address, distance); 
     sidebar.appendChild(sidebarEntry); 
     } 

     map.fitBounds(bounds); 

     }); 
    } 

    function createMarker(latlng, name, address) { 
     var html = "<b>" + name + "</b> <br/>" + address; 
     var marker = new google.maps.Marker({ 
     map: map, 
     position: latlng 
     }); 
     google.maps.event.addListener(marker, 'click', function() { 
     infoWindow.setContent(html); 
     infoWindow.open(map, marker); 
     }); 
     markers.push(marker); 
    } 

function createSidebarEntry(marker, name, address, distance) { 
     var div = document.createElement('div'); 
     var html = '<b>' + name + '</b> (' + distance.toFixed(1) + ')<br/>' + address; 
     div.innerHTML = html; 
     div.style.cursor = 'pointer'; 
     div.style.marginBottom = '5px'; 
     google.maps.event.addDomListener(div, 'click', function() { 
     google.maps.event.trigger(marker, 'click'); 
     }); 
     google.maps.event.addDomListener(div, 'mouseover', function() { 
     div.style.backgroundColor = '#eee'; 
     }); 
     google.maps.event.addDomListener(div, 'mouseout', function() { 
     div.style.backgroundColor = '#fff'; 
     }); 
     return div; 
    } 

    function downloadUrl(url, callback) { 
     var request = window.ActiveXObject ? 
      new ActiveXObject('Microsoft.XMLHTTP') : 
      new XMLHttpRequest; 

     request.onreadystatechange = function() { 
     if (request.readyState == 4) { 
      request.onreadystatechange = doNothing; 
      callback(request.responseText, request.status); 
     } 
     }; 

     request.open('GET', url, true); 
     request.send(null); 
    } 

    function parseXml(str) { 
     if (window.ActiveXObject) { 
     var doc = new ActiveXObject('Microsoft.XMLDOM'); 
     doc.loadXML(str); 
     return doc; 
     } else if (window.DOMParser) { 
     return (new DOMParser).parseFromString(str, 'text/xml'); 
     } 
    } 

    function doNothing() {} 

    //]]> 

回答

0

我找到了答案。

在这段代码:

var marker = createMarker(latlng, name, address); 
    bounds.extend(latlng); 

var sidebarEntry = createSidebarEntry(marker, name, address, distance); 
    sidebar.appendChild(sidebarEntry); 

我打电话createMarker填充标记变种。我发现它没有填充。

createMarker函数中,我需要进行更改,以便函数返回一个值:markers.push(marker);已更改为return marker;并且瞧!

1
return markers[markers.push(marker)-1]; 

作品,并保持你的标记阵列完整

相关问题