【问题标题】:Map Markers Not Displaying (JavaScript/Google Maps API V3)地图标记不显示 (JavaScript/Google Maps API V3)
【发布时间】:2013-04-26 10:32:30
【问题描述】:

我无法使用 Google Maps API v3 显示地图标记。我试图将它们全部保存在一个数组中,以使显示大量相对简单。目前,地图加载正常,但在尝试绘制标记时抛出错误Uncaught TypeError: Object #<Object> has no method 'setValues'setTimeout() 运行的每次迭代都会重复该错误。任何建议将不胜感激。

这是使用的 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]
    });
}

【问题讨论】:

  • 清理了一下:function mark(i){ var marker = new google.maps.Marker({ position: new google.maps.LatLng(markers[i][0],markers[ i][1]),地图:地图,动画:google.maps.Animation.DROP,标题:标记[i][2],}); }

标签: javascript google-maps


【解决方案1】:

好的,在 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

【讨论】:

    【解决方案2】:

    new 关键字让一切变得与众不同!

    我遇到了同样的问题。在构造 Marker 对象时使用 new 关键字至少可以让它在 Chrome 中再次工作。将它放在不同的超时事件中没有。在这里我认为new 只不过是语法糖......

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-07-17
      • 1970-01-01
      • 2012-04-12
      • 1970-01-01
      • 1970-01-01
      • 2015-07-01
      • 1970-01-01
      • 2012-12-29
      相关资源
      最近更新 更多