0

グーグルマッププロジェクトに取り組んでいて、マイナーな問題と思われるものに固執しています。displayMarkers 関数の firebug を呼び出すと、次のように返されます。

ReferenceError: 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);">
4

2 に答える 2

3

そのように (属性から)呼び出されるには、関数displayMarkersがグローバル スコープ上にある必要があります。onclick

それがおそらく起こっていることです。コードを適切にフォーマットしてインデントしてください。簡単に見つけられるはずです(initialize外側にあるはずですが、内側に定義されていると思います)。

于 2012-11-23T16:55:43.280 に答える
2

displayMarkers関数内で定義されinitializeます。

onclick="displayMarkers(1);"グローバル名前空間で関数を検索しますが、明らかにそこにはありません。displayMarkers関数をグローバルにし、内部で定義された変数を参照できるようにする回避策を次に示しますinitialize。変化する:

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

に:

function initialize() {
    // ...  
    window.displayMarkers = function (category) {
        // ...  
    }
}
于 2012-11-23T17:01:52.733 に答える