2012-11-23 173 views
0

在谷歌地圖項目上工作,並陷入似乎是一個小問題。當我打電話displayMarkers功能螢火蟲返回:未定義的JavaScript函數?

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'似乎是在'initialize'內定義的。 – Stan

+0

可能你在導致問題的'displayMarkers()'之前有錯誤 – Cdeez

回答

2

displayMarkers是在initialize函數內定義的。

onclick="displayMarkers(1);"爲函數搜索全局命名空間,顯然它不存在。這是一種解決方法,它使displayMarkers函數成爲全局函數,但仍然能夠引用initialize中定義的變量。變化:

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

要:

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

這解決了這個問題。謝謝 – shaytac

3

功能displayMarkers必須在全球範圍內被稱爲像(從onclick屬性)。

這可能是怎麼回事。請正確格式化並縮進您的代碼,並且應該很容易發現(我認爲它在initialize之內定義,而它應該在外面)。

+0

這正是發生了什麼事情。我花了10分鐘格式化它,並且它在initialize中定義。 –

+0

10分鐘?那麼在ide中的自動格式代碼怎麼樣?:) – dizpers

+1

注意:除非你讓'markers'成爲一個全局的東西,否則你必須做Salman A說保持函數正常工作。 – bfavaretto