2013-03-28 3 views
3

모든 마커의지도를 지우는 토글을 만들었습니다. 토글을 클릭하면이 getMapVisit()를 호출풍선 Google지도 지우기 : 잡히지 않는 ReferenceError : 마커가 정의되지 않았습니다.

내가 토글 클릭 할 때 나는이 오류가 무엇입니까 : 별 아래 표시된 행에서이 자바 스크립트 코드에서

Uncaught ReferenceError: markers is not defined 

:

function load() { 
     var map = new google.maps.Map(document.getElementById("map"), { 

     zoom: 13, 
     mapTypeId: 'roadmap' 
     }); 
     var infoWindow = new google.maps.InfoWindow; 

     // Change this depending on the name of your PHP file 
     downloadUrl("getMapMarkers.php", function(data) { 
     var bounds = new google.maps.LatLngBounds(); 
     var xml = data.responseXML; 
     var markers = xml.documentElement.getElementsByTagName("marker"); 
     for (var i = 0; i < markers.length; i++) { 
      var name = markers[i].getAttribute("name"); 
      var type = markers[i].getAttribute("type"); 
      var point = new google.maps.LatLng(
       parseFloat(markers[i].getAttribute("lat")), 
       parseFloat(markers[i].getAttribute("lng"))); 
      var html = "<b>" + name + "</b> <br/>" ; 
      var icon = customIcons[type] || {}; 
      var marker = new google.maps.Marker({ 
      map: map, 
      position: point, 
      icon: icon.icon, 
      shadow: icon.shadow 
      }); 
      bindInfoWindow(marker, map, infoWindow, html); 
      bounds.extend(point); 

     } 
     map.fitBounds(bounds); 
     }); 


    } 

    function bindInfoWindow(marker, map, infoWindow, html) { 
     google.maps.event.addListener(marker, 'click', function() { 
     infoWindow.setContent(html); 
     infoWindow.open(map, marker); 
     }); 
    } 

    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, request.status); 
     } 
     }; 

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

    function getMapVisit() 
    { 
     alert("in clear new clear al lmarkers"); 
     //clear markers 
     clearOverlays(); 
     markers = []; 

     return false; 
    } 

function clearOverlays() { 
     setAllMap(null); 
     } 

function setAllMap(map) { 
    for (var i = 0; i < markers.length; i++) { ************** 
     markers[i].setMap(map); 
    } 
} 

    function doNothing() {} 

지도 및 전환을 표시하고 내 PHP는 다음과 같습니다

$page->content .= '<p> <h3> Your Beer Map 
<form class="form-horizontal pull-right" style="width: 400px !important; padding-right: 20px !important;"> 
    <div class="control-group"> 
     <div class="controls btn disabled switch switch-two"> 
      <input id="week9" name="view" type="radio" checked> 
      <label for="week9" onclick="getMapDrank()">Drank Beer From</label> 

      <input id="month10" name="view" type="radio"> 
      <label for="month10" onclick="getMapVisit()">Visited</label> 

      <span class="slide-button btn btn-warning"></span> 
     </div> 
    </div> 
</form> 
</h3> 



</p>'; 




$page->content .= '<div id="map" style="width: 700px; height: 500px"></div>'; 

답변

1

markers입니다 downloadUrl() 콜백 함수 내의 로컬 변수 글로벌 변수가되기를 원하는 것 같습니다.

var markers = []; 

과에서 downloadUrl() 콜백 내에서이 줄을 변경 : 당신은 어떤 기능을 외부에서 맨 위에이 줄을 추가 시도 할 수

var markers = xml.documentElement.getElementsByTagName("marker"); 

에 :

markers = xml.documentElement.getElementsByTagName("marker"); 

그 코드의 유일한 문제는 아니지만 어쨌든 한 가지 문제입니다.

+0

내 실수는 없지만 모든 마커가 지워지지는 않습니다. 그 밖의 내가 누락 될 수있는 아이디어가 있습니까? – Mike

관련 문제