传递指向变量

时间:2015-07-14 23:16:25

标签: javascript google-maps-api-3

我正在使用谷歌地图api v3 javascript。我有一个按钮列表,我需要它们将地图平移到一个新标记。每个位置都已设置:

var location1 = new google.maps.LatLng(61.21444507411448,-149.8841142654419);
var location2 = new google.maps.LatLng(61.21179982469673,-149.89338397979736);
var location3 = new google.maps.LatLng(61.21580894399659,-149.88239765167236);

地图工作正常,所有设置都有标记和一切。现在要加载新位置,平移功能:

map.panTo(thelocation);

我可以直接传递变量,谷歌地图会读取它。但是当我为其中一个按钮创建一个click函数并使用与location var同名的id标签时会发生什么,它无法读取它,因为它不读取位置var中的数据,它读取位于ID:

$(".listing").click(function() {
    console.log("you clicked on a listing!");
    var location = $(this).attr('id');
    console.log(location);
})

我需要将panTo功能放在列表单击功能中,并根据他们点击的列表将其平移到正确的位置。
这可能不止一种方式。我想使用点击的列表的id(与latlng变量的id相同),并让panTo读取存储在var location1(或2,3等)中的数据。不要把它读成字符串。
我怎样才能做到这一点?我在bash中知道它类似于eval

2 个答案:

答案 0 :(得分:3)

有两种方法可以做到这一点,最好的方法是使用一个对象来保存值。您可以使用id作为密钥并仅引用它。

var details = { 
    location1 : new google.maps.LatLng(61.21444507411448,-149.8841142654419),
    location2 : new google.maps.LatLng(61.21179982469673,-149.89338397979736),
    location3 : new google.maps.LatLng(61.21580894399659,-149.88239765167236)
};

$(".listing").on("click", function() {
    var loc = this.id;
    console.log(details[loc]);
});

答案 1 :(得分:0)

Javascript也有一个eval函数,所以你可以解析你的字符串变量,通过使用eval指向一个新的函数来指向实际的latlng变量:

$(".listing").click(function() {
    console.log("you clicked on a listing!");
    var location = $(this).attr('id');
    var goLocation = eval(location);
    console.log(location);
    console.log(goLocation);
    map.panTo(goLocation);
})

但如果您对安全感兴趣,可以选择其他解决方案:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/eval

开始 不要不必要地使用eval

eval()是一个危险的函数,它使用调用者的特权执行它传递的代码。如果您使用可能受恶意方影响的字符串运行eval(),则最终可能会使用您的网页/扩展程序的权限在用户的计算机上运行恶意代码。更重要的是,第三方代码可以查看eval()被调用的范围,这可能会导致类似Function不易受影响的攻击。<​​/ p>

eval()通常也比替代方案慢,因为它必须调用JS解释器,而许多其他构造由现代JS引擎优化。

对于常见用例,eval()有更安全(更快!)的替代方案。