谷歌地图V3无法删除事件监听器

4
我有一个关于Google Maps API v3的问题。当缩放级别改变时,我想要移除一个鼠标悬停监听器。
这是我的代码:
$(document).ready(function() {

    var myOptions = {
        ...
    };

    var map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);

    function colormaps(map) {
        var newmap = map;
        var piemonteCoords = [
            ...
        ];        
        var piemontePolygon = new google.maps.Polygon({
            ...
        });         
        piemontePolygon.setMap(newmap);
        google.maps.event.addListener(piemontePolygon, 'mouseover', function(event) {
            var prova = event;
            showInfo(prova, newmap, 'Italy');
        });

        google.maps.event.addListener(newmap, 'zoom_changed', function() {
            zoomLevel = map.getZoom();
            if (zoomLevel >= 6) {
                google.maps.event.clearListeners(newmap, 'mouseover');
            }
            else {
                ...
            }
        } //fine colormaps
        google.maps.event.addDomListener(window, 'load', colormaps(map));
    });

当缩放达到目标级别时,监听器未被移除。出了什么问题?
1个回答

11
你正在为 piemontePolygon 对象添加监听器,但你正在从 newmap 对象中清除它,这可能是错误的(我不是该领域的专家,所以无法确定)。
尝试像这样进行操作:
google.maps.event.clearListeners(piemontePolygon, 'mouseover');


编辑:
根据文档,如果上述代码失败,可以尝试另一种方法。


情况1(您也可以将事件类型作为第二个参数传递):

google.maps.event.clearInstanceListeners(piemontePolygon);

案例2:
var listener1 = google.maps.event.addListener(piemontePolygon, 'mouseover', function(
    var prova = event;
    showInfo(prova, newmap, 'Italy')
});

google.maps.event.removeListener(listener1);

2
+1 情况2是最好的选择,最明确地理解正在发生的事情。 - Erik Philips
感谢大家的回答...第一个解决方案有效,第二个无效。 - Andrea
很遗憾谷歌没有以(在我看来)更合乎逻辑的方式来实现 - google.maps.event.removeListener(obj, ['event'], [optional callback]) - 第二和第三个参数是可选的,以提供更具体的功能。 - Dominic

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接