我正在使用谷歌地图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
。
答案 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()
有更安全(更快!)的替代方案。