【问题标题】:google maps v3 setMap undefined when trying to clear all markers谷歌地图 v3 setMap 尝试清除所有标记时未定义
【发布时间】:2011-05-07 10:37:59
【问题描述】:

我看到这里有人解释一下这个功能:

// REMOVE All MARKERS FUNCTION
    // Removes all markers currently on map
    // PARAMS: None
    function removeAllMarkers(){// removes all markers from map
        if (markersArray) {
            for (i in markersArray) {
                markersArray[i].setMap(null);
                markersArray = [];
                markersInfoArray = [];
            };
        };
    };

但我收到一个 javascript 错误...

错误中断 markerArray[i].setMap 不是函数

页面位于:http://www.focus-on-plants.com/locator.php

有什么想法吗???

我尝试了这些建议,并将 MarkersArray=[]markersInfoArray = [] 移到 for 循环之外,所以我有这个:

for( var i = 0; i < markersArray.length; i++ ){
    markersArray[i].setMap(null);
}

但我得到相同的error markersArray[i].setMap is not a function

所以我环顾四周并尝试了这种方法:

function removeAllMarkers(){// removes all markers from map
    alert('REMOVE MARKERS - markersArray count:'+ markersArray.length);
    while(markersArray[0]){
        markersArray.pop().setMap(null);
        markersInfoArray.pop()
    }
    markersArray.length = 0;
    markersInfoArray.length = 0;
};

我仍然得到同样的错误,是什么给出的?几乎就好像 setMap() 不存在一样,我在另一个线程 here 中读到它从 set_map 更改为 setMap() 但那些对我也不起作用:(

【问题讨论】:

    标签: jquery arrays google-maps-api-3


    【解决方案1】:

    尝试一个实际的循环。 for (i in markersArray) 也将检索属性。它与 PHP 的 foreach 不同。

    for( var i = 0; i < markersArray.length; i++ ) {}
    

    【讨论】:

    • 效果很好,谢谢,我给你两个正确的答案!! Harmen 在 for 循环中发现了 markersArray =[],感谢大家!
    • 请参阅上述答案中的评论 :(
    【解决方案2】:

    它会中断,因为您在循环内重置了数组。这可能会好很多:

    function removeAllMarkers(){
        if (markersArray) {
            for (i in markersArray) {
                markersArray[i].setMap(null);
            }
    
            markersArray = [];
            markersInfoArray = [];
        }
    }
    

    顺便说一句,你不需要一直使用; 所有 ;)

    【讨论】:

    • 感谢疲惫的眼睛没有发现这一点,我认为使用 ; 是个好习惯我想我刚刚习惯这样做
    • 哈哈,通常加分号很好用,但是文档说你只需要在声明后添加它:developer.mozilla.org/en/JavaScript/Reference/Statements——无论如何,Javascript不像PHP,你不如果忘记分号,总是会出错
    • hmmm 认为它已修复但仍然出现相同的错误,ir 警告有标记但仍然提出 makersArray[i]setMap() is not a function
    【解决方案3】:

    好的,我让它工作了,soloution 有点难看,但它有效,

    我认为它没有从我的数组中存储的标记中找到 google.maps 命名空间位,所以这就是它认为该函数不存在的原因。

    即。应该是 google.maps.marker.setMap() 数组中的标记只是输出 lat 和 lng。

    所以在 removeAllMarkers 函数中,我创建了一个新的 google.maps.marker delmarker 使用存储在markersArray 中的标记中的数据填充它 然后使用这个新的参考delmarker.setMap(null)删除地图的标记

    宾果游戏它有效,但啰嗦了,我花了一段时间才弄清楚:)

    function removeAllMarkers(){// removes all markers from map
        for( var i = 0; i < markersArray.length; i++ ){
        delmarker = new google.maps.Marker({
            position: markersArray[i]
        })
        delmarker.setMap(null)
        }   
        markersArray.length = 0;
        markersInfoArray.length = 0;
    };
    

    【讨论】:

      【解决方案4】:

      我遇到了和你一样的问题。但是将 for-in 循环更改为实际循环(如建议的 here,已修复它。

      删除标记时无需创建新的 google.maps.marker。

      示例代码:

      
      var markersArray = [];
      
      

      function addMarker() { var marker = new google.maps.Marker({ position: latlng, map: map }); markersArray.push(marker); }

      function removeMarker() { if (markersArray) { for (i=0; i < markersArray.length; i++) { markersArray[i].setMap(null); } markersArray.length = 0; } }

      【讨论】:

        猜你喜欢
        • 2016-07-19
        • 2012-08-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-05-27
        • 2017-02-02
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多