Javascript:使用开关为函数设置变量值
我对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
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有所帮助。非常感谢谢谢,这真的很有帮助,很抱歉新手的问题,这完全是基于新手的知识。再次感谢你。