完全被" UncaughtReferenceError:X未定义在函数"

时间:2017-11-07 22:45:36

标签: javascript google-maps-api-3 scope google-fusion-tables

我正在尝试构建一个谷歌地图,使用他们的api从融合表中获取数据并将其显示在地图上。我现在在地图上显示数据。

我想有一个按钮可以打开/关闭数据,在广泛搜索后,我试图实现我找到的解决方案。我的代码设置几乎完全相同,但仍然无法切换数据。

我认为我的示波器出了问题,因为每当我点击按钮时它会给出一个"未捕获的ReferenceError:view1未定义" Javascript Dev Console中的错误。

我也搜索了这一点,起初我相信功能" toggleView1"我没有在全球定义,所以我改变了它,但它仍然无法工作......任何建议都会非常感激,我在这一点上不知所措。

 <!DOCTYPE html>
<html>
  <head>
    <title>WorkingMapTiles</title>
    <meta charset="utf-8"/>
    <meta name="viewport" content="initial-scale=1.0, user-scalable=no"/>
    <script src="https://maps.google.com/maps/api/js?key=XXXAPIKEYXX">.   </script>
    <script>



  var view1 = new google.maps.FusionTablesLayer({
    query: {
      select: '\'LatitudeLongitude\'',
      from: 'XXXfusionTableIdXXX'
    }
  });

  function init() {
    var mapBounds = new google.maps.LatLngBounds(
        new google.maps.LatLng(45.000, -65.000),
        new google.maps.LatLng(46.000, -64.000));
    var mapMinZoom = 14;
    var mapMaxZoom = 17;

    var map = new google.maps.Map(document.getElementById("map"));
    map.fitBounds(mapBounds);


    view1.setMap(map);
  }



  ////FUNCTION NOT GETTING TRIGGERED BY BUTTONS
  function toggleView1() { 
    if(view1.map) {
      view1.setOptions({map: null});
    } else {
      view1.setOptions({map: map});
    }
  }
    </script>
<style>
  html, body, #map { width:100%; height:100%; margin:0; padding:0; }
  #floating-panel { position: absolute; top: 10px; left: 25%;}
</style>
</head>

<body onload="init()">
  <div id="map"></div>
  <div id="floating-panel">
    <input type="button" value="Toggle view1" onclick="toggleView1();">. </input>
  </div>
</body>
</html> 

1 个答案:

答案 0 :(得分:0)

渊源:

function init() {
  var mapBounds = new google.maps.LatLngBounds(
      new google.maps.LatLng(45.000, -65.000),
      new google.maps.LatLng(46.000, -64.000));
  var mapMinZoom = 14;
  var mapMaxZoom = 17;

  var map = new google.maps.Map(document.getElementById("map"));
  map.fitBounds(mapBounds);

  var view1 = new google.maps.FusionTablesLayer({
    query: {
      from: 'XXXfusionTableIdXXX'
    }
  });

  view1.setMap(map);
}

查看一个是在init()的范围内,因为这是定义的位置。从init()的范围中带来了view1的变量定义。请注意,您可能在init()范围内没有view1的另一个定义,或者会有variable shadowing