JavaScript关闭是解决方案,如何使用它?

时间:2013-03-10 05:51:00

标签: javascript jquery function google-maps closures

我已经实现了谷歌地图,而且我正在获得经度和经度,我希望这些值可以在谷歌地图功能之外使用。只有当我在谷歌地图代码中调用这些变量时,我才能将它们添加到DOM中。如何在谷歌地图功能之外使用这些变量。

点击地图后,我需要将这些纬度和经度值作为查询字符串附加到URL。

我不确定Closures如何正常工作。有人可以帮我将这些纬度和经度值添加到google maps initilaize()函数之外的查询字符串中。

以下是我的代码;

<script>
function initialize() {
  var mapOptions = {
    center: new google.maps.LatLng(44.397, -122.644),
    zoom: 4,
    mapTypeId: google.maps.MapTypeId.ROADMAP
  }
  var map = new google.maps.Map(document.getElementById("map_canvas"), mapOptions);
  var marker = new google.maps.Marker({
    position: new google.maps.LatLng(44.397, -122.644),
    map: map,
    draggable: true
  });
  google.maps.event.addListener(map, 'mousemove', function ques(event) {
    var lat_value = event.latLng.lat();
    var lon_value = event.latLng.lng();
    document.getElementById("llat").value = lat_value;
    document.getElementById("llon").value = lon_value;
  });
  google.maps.event.addListener(map, 'click', function cclick() {
  })
}
</script>
<script>
$(function () {
  // Access functions and variables defined in google maps initialize() function here
  if(document.location.href.indexOf('?') == -1) {
    window.location = window.location + "?lat_value";
  }
});
</script>

FIDDLE

1 个答案:

答案 0 :(得分:0)

您不需要在这里使用JS闭包。您甚至不需要在initialize方法范围之外编写处理程序。就像执行mousemove处理程序一样:

google.maps.event.addListener(map, 'click', function (e) {
    var lat_value = e.latLng.lat();
    var lon_value = e.latLng.lng();
    window.location = window.location.href.split('?')[0] 
      + "?lat_value=" + lat_value
      + "&long_value=" + lon_value;
});

一般情况下,如果您希望在初始化之外访问mapOptions变量,只需在外部范围内定义它(即在var mapOptions之前执行function initialize声明)