2009-08-04 99 views
1

对Javascript来说是全新的,但我需要它在我的项目中使用googlemaps,我试图为每个特定城市设置纬度,经度和地图缩放值,所以从隐藏的表单输入中获取城市名称,并使用Switch切换城市名称。Javascript:使用切换为函数设置变量值

cityDiv = document.getElementById('id_city'); 
cityDiv.value = idCity ; 

switch (idCity) 
{ 
case "city1": 
    var map_long = 31.37667; 
    var map_lat = 31.04306; 
    var map_zoom = 3; 
    break 
case "city2": 
    var map_long = 31.33333; 
    var map_lat = 29.85; 
    var map_zoom = 7; 
    break 
default: 
    var map_long = 31.37667; 
    var map_lat = 31.04306; 
    var map_zoom = 3; 
} 

function onLoad() { 
    map = new GMap(document.getElementById("map")); 
    map.addControl(new GSmallMapControl()); 
    map.addControl(new GMapTypeControl()); 
    map.centerAndZoom(new GLatLng(map_lat,map_long) , map_zoom); 

    GEvent.addListener(map, 'click', function(overlay, point) { 
     if (prev_pin) { 
      map.removeOverlay(prev_pin); 
      prev_pin = null; 
     } 
     //var yPoint = new YGeoPoint({{ place.latitude }},{{ place.longitude }}); 

     if (point) { 
      pin = new GMarker(point); 
      map.addOverlay(pin); 
      prev_pin = pin; 

      latDiv = document.getElementById('id_latitude'); 
      lngDiv = document.getElementById('id_longitude'); 
      lngDiv.value = point.x; 
      latDiv.value = point.y; 
     } 
    }); 

} 

对不起,这个新手问题。

此致敬礼。

从注释编辑由geowa4:?!

的问题,问题是从来没有设置变量:(,有啥错我的代码我改变“cityDiv.value = idCity;”到“变种idCity = cityDiv.value;“这没有工作,但这次地图拒绝加载

+0

问题是什么? – 2009-08-04 19:27:57

+0

问题是? – 2009-08-04 19:28:22

+0

问题和问题是变量从未设置:(所以我的代码有什么问题?! 我将“cityDiv.value = idCity; ”更改为“var idCity = cityDiv.value;” 工作,但这次地图拒绝加载 – Hamza 2009-08-04 19:49:35

回答

1

您的问题是范围,纯粹和简单。使用var将您的变量作用于当前的词法作用域,在var map_long = 31.37667;等的情况下是switch语句。一旦你超出了范围,那么在该范围内声明的任何变量消失,除非保持外部参考。您可以删除var语句,但这会使变量成为全局变量。我会建议在一个对你有意义的范围内声明你的变量,只有在绝对必要时才使它们成为全局变量。

2

您是否尝试过倾销您的值,逐步调试?Alert statementsconsole.log()声明,以查看页面认为该值的选择是?

你也可以考虑做一个对象,你c然后更新:

// Untested, but you should get the gist 
var cityInfo = { 
    map_long : 0.0, 
    map_lat : 0.0, 
    map_zoom : 0 
}; 

switch (idCity) { 
case "city1": 
    cityInfo.map_long = 31.37667; 
    cityInfo.map_lat = 31.04306; 
    cityInfo.map_zoom = 3; 
    break 
case "city2": 
    cityInfo.map_long = 31.33333; 
    cityInfo.map_lat = 29.85; 
    cityInfo.map_zoom = 7; 
    break 
default: 
    cityInfo.map_long = 31.37667; 
    cityInfo.map_lat = 31.04306; 
    cityInfo.map_zoom = 3; 
} 
3

尝试下面的代码:

mapInfo = 
{ 
    "city1": 
    { 
    "long": 31.37667, 
    "lat": 31.04306, 
    "zoom": 3 
    }, 
    "city2": 
    { 
    "long": 31.33333, 
    "lat": 29.85, 
    "zoom": 7 
    } 
}; 

function onLoad() { 
    map = new GMap(document.getElementById("map")); 
    map.addControl(new GSmallMapControl()); 
    map.addControl(new GMapTypeControl()); 
    var cityDiv = document.getElementById('id_city'); 
    var idCity = cityDiv.value || "city1"; 
    map.centerAndZoom(new GLatLng(mapInfo[idCity].lat,mapInfo[idCity].long) , mapInfo[idCity].zoom); 

    GEvent.addListener(map, 'click', function(overlay, point) { 
     if (prev_pin) { 
       map.removeOverlay(prev_pin); 
       prev_pin = null; 
     } 
     //var yPoint = new YGeoPoint({{ place.latitude }},{{ place.longitude }}); 

     if (point) { 
       pin = new GMarker(point); 
       map.addOverlay(pin); 
       prev_pin = pin; 

       latDiv = document.getElementById('id_latitude'); 
       lngDiv = document.getElementById('id_longitude'); 
       lngDiv.value = point.x; 
       latDiv.value = point.y; 
     } 
    }); 

}