2012-02-01 189 views
3

我遇到了麻烦地图标记使用谷歌地图API V3显示。我试图让他们都在一个单一的数组,以使显示大量相对简单。目前,地图加载正常,但在试图绘制标记时会抛出错误Uncaught TypeError: Object #<Object> has no method 'setValues'。每次迭代运行setTimeout()时都会重复该错误。任何建议将不胜感激。地图标记不显示(JavaScript的/谷歌地图API V3)

这是使用JavaScript的:

var map; 
var markers = [ 
    [ 
     45.768366, 
     -108.5975760, 
     'Fitness 19' 
    ], 
    [ 
     45.785684, 
     -108.6144625, 
     'Granite Fitness' 
    ], 
     ... (more, syntactically correct) 
    [ 
     45.7920092, 
     -108.4886232, 
     'Steepworld' 
    ] 
]; 
function mapinit() { 
    var conf = { 
     zoom: 11, 
     center: new google.maps.LatLng(45.7832856,-108.5006904), 
     mapTypeId: google.maps.MapTypeId.ROADMAP 
    } 
    map = new google.maps.Map(document.getElementById('mapcont'),conf); 
    for(i in markers) { 
     window.setTimeout('mark('+i+')',i*200); 
    } 
} 
function mark(i){ 
    google.maps.Marker({ 
     position: google.maps.LatLng(markers[i][0],markers[i][1]), 
     animation: google.maps.Animation.DROP, 
     title: markers[i][2] 
    }); 
} 
+0

清理了一下: 功能标志(I){VAR 标记=新google.maps.Marker({ 位置:新google.maps.LatLng (markers [i] [0],markers [i] [1]) map: } – 2012-02-01 02:12:49

回答

5

好,颇有几分在Chrome的JavaScript控制台(我喜欢那个东西)乱搞后,我能得到它完美的工作。我重写了mapinit()mark()功能这样:

function mapinit() { 
    var conf = { 
     zoom: 11, 
     center: new google.maps.LatLng(45.7832856,-108.5006904), 
     mapTypeId: google.maps.MapTypeId.ROADMAP 
    } 
    map = new google.maps.Map(document.getElementById('mapcont'),conf); 
    for(i in markers) { 
     markers[i][3] = new google.maps.LatLng(markers[i][0],markers[i][1]); 
     window.setTimeout('mark('+i+')',i*200); 
    } 
} 
function mark(i){ 
    new google.maps.Marker({ 
     position: markers[i][3], 
     animation: google.maps.Animation.DROP, 
     map: map, 
     title: markers[i][2] 
    }); 
} 

这里的主要区别是,标记的position可变似乎需要在由于某种原因,一个外部变量被初始化,所以当我遍历markers阵列,我生成一个google.maps.LatLng作为每个标记的第四项。然后在mark()函数中引用它,并且标记显示成功。用于错开标记显示的setTimeout奇妙地工作,特别是在快速连接脚本和地图加载的情况下更是如此。

查看最终结果on my inClass site

6

这是new关键字,使所有的差异!

我有同样的问题。至少在Chrome中构建Marker对象时使用new关键字。把它放在不同的超时事件中没有。在这里,我想new无非是语法糖...