Javascript - 如何在var_1,var_2等循环名称中提供变量

时间:2010-08-31 13:29:22

标签: javascript google-maps

我正在使用Google Maps API V3。

我想在地图上创建一系列标记。

我按照教程进行了操作:

现在这段代码添加了一个标记 - 第一个。

我对Javascript完全不熟悉但是根据我的PHP知识,我认为这不起作用的原因是因为所有标记都存储在名为'm'的var中。

I.E Number 2取代1号

然而我的困惑是,如果是这种情况,Marker 2将显示为Marker 1。

有人可以假设可能的解释/修复吗?

由于

以下编辑代码:

function initialize(){
// Creating a map
var map = new google.maps.Map(document.getElementById('map'), {
  zoom: 10,
  center: new google.maps.LatLng(53.0123601276819, -2.44519164333635),
  mapTypeId: google.maps.MapTypeId.ROADMAP
});


var m = [];

function addMarker(title, lat, lng) {
m = new google.maps.Marker({
position: new google.maps.LatLng(lat, lng),
map: map,
title: title,  
clickable: true 
});


}



addMarker('Home', 53.0682143712504, -2.52150736731894);
addMarker('Away', 53.0123601276819, -2.44519164333635);



}

3 个答案:

答案 0 :(得分:2)

我怀疑问题是你正在尝试将对象“m”视为数组。声明如下:

var m = [];

看看会发生什么。在普通对象上没有“推”功能,因此在添加第一个标记后该行会抛出异常。

Javascript错误控制台,无论您使用的是哪种浏览器,都会在您尝试新代码时始终打开。好吧,也许总是,但肯定会发生奇怪的事情。

编辑 - 您的代码中对.push()函数的调用很好;问题是你试图从不是数组的东西中调用它。所有函数都是使用给定元素扩展数组。 Javascript数组有点奇怪,主要的魔法与运行时如何维护“length”属性的值有关。您可以更直接地扩展这样的数组:

arr[arr.length] = newValue;

你也可以简单地使用一些以某种方式计算的数字索引:

arr[pick_a_number()] = newValue;

执行此操作时,如果用作索引的数字大于当前值,则运行时会确保正确更新“length”属性。

现在,回到您更新的代码。现在它可以工作,因为你连续向地图添加点而不会触发任何异常。但是,写下:

m = google.whatever( ... );

您不再将这些点添加到数组中 - 您将将变量“m”重新分配给其中一个点,一遍又一遍。将其更改回“推”并 - 如果您还按照我的建议更改了“m”的声明 - 它仍然有效,并且您将正确填充阵列。

答案 1 :(得分:0)

m的范围是它所在的函数,所以这不是问题。我的猜测是,当您致电marker.push(m)时,您会收到错误消息。 marker是一个对象,没有push方法。使它成为一个数组(var marker = [])。由于它在该行上断开,它永远不会执行对该函数的第二次调用。但它已经在屏幕上添加了标记,这就是你看到它的原因。

答案 2 :(得分:0)

变量m在初始化范围内,如函数addMarker。

每次将m(首先是数组)设置为Marker对象时,都会存储对新创建的标记对象的引用。这可能是你提到的问题。

使用push(一种将对象添加到数组的方法),而不是将m设置为Marker对象,如下所示:

m.push(new google.maps.Marker({
  position: new google.maps.LatLng(lat, lng),
  map: map,
  title: title,  
  clickable: true 
});).