2012-11-23 169 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