Javascript:使用开关为函数设置变量值

Javascript:使用开关为函数设置变量值,javascript,Javascript,我对Javascript完全陌生,但我需要它在我的项目中使用谷歌地图,我试图为每个特定城市设置纬度、经度和地图缩放值,因此我从一个隐藏的表单输入中获取城市名称,并使用开关切换城市名称 cityDiv = document.getElementById('id_city'); cityDiv.value = idCity ; switch (idCity) { case "city1": var map_long = 31.37667; var map_lat = 31.0430

我对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的评论进行编辑:


问题和问题是变量从未设置:,那么我的代码怎么了?!i更改cityDiv.value=idCity;至var idCity=cityDiv.value;虽然效果不太好,但这次地图拒绝加载

您是否尝试过转储值、单步执行和调试,或语句,以查看页面认为选择的值是什么

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

// 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;
}

你的问题是范围,单纯而简单。使用var将变量作用域设置为当前词法作用域,在var map_long=31.37667的情况下;等是switch语句。一旦退出该范围,除非维护外部引用,否则在该范围内声明的任何变量都将消失。您可以删除var语句,但这会使变量成为全局变量。我建议将变量声明在对您有意义的范围内,只有在绝对必要时才将其设置为全局变量。

请尝试以下代码:

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; 
        } 
    });

}

问题和问题是变量从未设置:,那么我的代码怎么了?!i更改cityDiv.value=idCity;至var idCity=cityDiv.value;这不太管用,但这次地图拒绝加载P.s:我完全是JS新手:我把你评论中的问题放在了问题中,因为那是它的归属。如果您愿意,可以进一步编辑它。这似乎更合理-我想知道他在原始示例中使用的那些变量是否在本地作用于switch语句。嗯,我尝试过这个,但效果不太好,作为一名新手,我还没有调试太多javascript,但现在正在这样做@Meredith,我不知道它们是否在本地范围内,但它与我在上面的示例中列出的相同!请注意,上面的代码不起作用,因为cityInfo变量声明不正确。这是一个关联数组,所以请将分号改为逗号,等号改为冒号,这样就可以全部设置好了。谢谢,coderjoe。你完全正确。在我写这本书的时候,我正在浏览几种不同的脚本语言。非常感谢,它工作得非常好,作为一个新手和自学成才的书呆子,我仍在试图弄清楚如何、什么以及为什么。但是非常感谢你。这些问题表明你是或者可能会是一名优秀的程序员;你的代码有两个问题。第一个是可变范围问题,这是前面的答案提出的。在JS中使用var时,变量仅对当前代码块及其子块有效。删除该选项后,变量立即成为全局窗口对象的属性。第二,我不喜欢switch语句,所以我只是利用了JS对象作为关联数组的优势。@BYK:我分析了代码并阅读了更多关于如何处理变量的内容,这很简单,但有些非常棘手,我用其他语言编程,但不知何故,我讨厌javascript,也不太习惯处理它,使用jQuery处理小任务和效果。希望这能对我自学JS有所帮助。非常感谢谢谢,这真的很有帮助,很抱歉新手的问题,这完全是基于新手的知识。再次感谢你。