2012-11-23 4 views
0

Google지도 프로젝트에서 작업하고 사소한 문제인 것처럼 보입니다. 내가 displayMarkers를 호출 할 때 함수 불을 지르고는 반환 displayMarkers는 전역 범위에 있어야합니다정의되지 않은 자바 스크립트 기능?

ReferenceError: displayMarkers is not defined [Break On This Error]

displayMarkers(1);

<script type="text/javascript"> 
    function initialize() { 
     var center = new google.maps.LatLng(25.7889689, -80.2264393); 
     var map = new google.maps.Map(document.getElementById('map'), { 
      zoom: 10, 
      center: center, 
      mapTypeId: google.maps.MapTypeId.ROADMAP 
     }); 
     //var data = [[25.924292, -80.124314], [26.140795, -80.3204049], [25.7662857, -80.194692]]  var data = {"crs": {"type": "link", "properties": {"href": "http://spatialreference.org/ref/epsg/4326/", "type": "proj4"}}, "type": "FeatureCollection", "features": [{"geometry": {"type": "Point", "coordinates": [25.924292, -80.124314]}, "type": "Feature", "properties": {"industry": [2], "description": "hosp", "title": "shaytac hosp2"}, "id": 35}, {"geometry": {"type": "Point", "coordinates": [26.140795, -80.3204049]}, "type": "Feature", "properties": {"industry": [1, 2], "description": "retail", "title": "shaytac retail"}, "id": 48}, {"geometry": {"type": "Point", "coordinates": [25.7662857, -80.194692]}, "type": "Feature", "properties": {"industry": [2], "description": "hosp2", "title": "shaytac hosp3"}, "id": 36}]} 
     var markers = []; 
     for (var i = 0; i < data.features.length; i++) { 
      var latLng = new google.maps.LatLng(data.features[i].geometry.coordinates[0], data.features[i].geometry.coordinates[1]); 
      var marker = new google.maps.Marker({ 
       position: latLng, 
       title: console.log(data.features[i].properties.industry[0]), 
       map: map 
      }); 
      marker.category = data.features[i].properties.industry[0]; 
      marker.setVisible(true); 
      markers.push(marker); 
     } 
     function displayMarkers(category) { 
      var i; 
      for (i = 0; i < markers.length; i++) { 
       if (markers[i].category === category) { 
        markers[i].setVisible(true); 
       } else { 
        markers[i].setVisible(false); 
       } 
      } 
     } 
    } 
    google.maps.event.addDomListener(window, 'load', initialize); 
</script> 
<div id="map-container"> 
    <div id="map"></div> 
</div> 
<input type="button" value="Retail" onclick="displayMarkers(1);"> 
+2

먼저, 코드를 읽기 어렵다. 둘째,'displayMarkers'는'초기화 '내부에 정의 된 것 같습니다. – Stan

+0

아마도 문제를 일으키는'displayMarkers()'전에 오류가 있습니다. – Cdeez

답변

2

displayMarkersinitialize 함수 내에 정의됩니다.

onclick="displayMarkers(1);"은 함수의 전역 이름 공간을 검색하지만 분명히 존재하지 않습니다. 다음은 displayMarkers 함수를 전역으로 만들지 만 여전히 initialize에 정의 된 변수를 참조 할 수있는 해결 방법입니다. 변경 :

function initialize() { 
    // ... 
    function displayMarkers(category) { 
     // ... 
    } 
} 

사람 :

function initialize() { 
    // ... 
    window.displayMarkers = function (category) { 
     // ... 
    } 
} 
+0

이 문제가 해결되었습니다. 감사 – shaytac

3

기능은 (AN onclick 속성에서)처럼 호출 할 수 있습니다.

아마도 그럴 것입니다. 형식을 지정하고 코드를 들여 쓰기 적절하게 배치하십시오.이 코드는 쉽게 찾아 낼 수 있어야합니다 (외부에 있어야하지만 initialize 안에 정의되어 있다고 생각합니다).

+0

이것은 정확히 무슨 일이 일어나고 있는지입니다. 방금 포맷하는 데 10 분을 소비했는데 내부에 정의되어 초기화되었습니다. –

+0

10 분? :) 자동 서식 코드는 무엇입니까? :) – dizpers

+1

참고 : '마커'를 전역으로 설정하지 않는 한, Salman A가 작동하는 기능을 유지해야합니다. – bfavaretto

관련 문제