【问题标题】:gmap3 remove event listenergmap3 移除事件监听器
【发布时间】:2011-12-30 08:11:27
【问题描述】:

我想移除点击事件监听器:

var events = {
    click: function () {
        // crazy stuff here :- )
    }
};

$(where).gmap3(
    {
        events: events
    }
);

需要类似的东西:

$(where).gmap3().removeEventListener('click');

【问题讨论】:

  • 为此,我需要引用特定的事件侦听器对象。你知道如何将它添加到上面的代码中吗?

标签: javascript jquery google-maps google-maps-api-3 jquery-gmap3


【解决方案1】:

我以不同的方式解决了这个问题:

 var events = {
     click: function () {
         if (P.settings.mapPinActive === false) {
             return;
         }
         // crazy stuff here :- )
     }
 };

设置对象中的全局属性,而不是分离和附加事件。

【讨论】:

    【解决方案2】:

    没有意识到 gmap3 是一个包装库。生病删除重复的评论。

    浏览 gmaps3 文档,我没有看到使用库函数删除侦听器的任何具体内容,但您可以使用 action: 'get' 抓取标记,然后清除侦听器。

    这是一个从文档中更改的示例。我向标记添加了名称和标记属性,并在此脚本的末尾使用tag:'2' 从标记中删除了mouseover 侦听器。出于某种原因,这个库是善变的,它希望 nametag 属性都能找到标记。

    $('#test').gmap3({
        action: 'init',
        options: {
            center: [46.578498, 2.457275],
            zoom: 5
        }
    }, {
        action: 'addMarkers',
        markers: [
            {
            name : 'marker', 
            tag: '1',
            lat: 48.8620722,
            lng: 2.352047,
            data: 'Paris !'},
            {
            name : 'marker',
            tag: '2',
            lat: 46.59433,
            lng: 0.342236,
            data: 'Poitiers : great city !'},
            {
            name : 'marker',
            tag: '3',
            lat: 42.704931,
            lng: 2.894697,
            data: 'Perpignan !  GO USAP !'}
        ],
        marker: {
            options: {
                draggable: false
            },
            events: {
                mouseover: function(marker, event, data) {
                    var map = $(this).gmap3('get'),
                        infowindow = $(this).gmap3({
                            action: 'get',
                            name: 'infowindow'
                        });
                    if (infowindow) {
                        infowindow.open(map, marker);
                        infowindow.setContent(data);
                    } else {
                        $(this).gmap3({
                            action: 'addinfowindow',
                            anchor: marker,
                            options: {
                                content: data
                            }
                        });
                    }
                },
                mouseout: function() {
                    var infowindow = $(this).gmap3({
                        action: 'get',
                        name: 'infowindow'
                    });
                    if (infowindow) {
                        infowindow.close();
                    }
                }
            }
        }
    });
    
    
    //get the marker by name and tag
    var mark = $('#test').gmap3({
        action: 'get',
        name:'marker',
        tag: '2'
    });
    
    //remove the event listener
    google.maps.event.clearListeners(mark, 'mouseover');
    

    这是此脚本工作的示例:http://jsfiddle.net/5GcP7/。鼠标悬停时,中间的标记不会打开信息窗口。

    【讨论】: