javascript - Google Maps Api V3 - 将多个监听器分配给同一标记对象

标签 javascript google-maps google-maps-api-3

目前正在开展一个项目,将我们的 Goole Maps API 从 v2 升级到 v3,遇到了一个问题,需要确认是否可以将多个监听器注册到同一个标记。谁能确认 Goole Maps API v3 是否像 API v2 一样支持同一标记上的多个监听器?

示例代码:

var mapObject = document.getElementById('map_canvas');
var points = new Array();
var markers = new Array();

var mapOptions = {
    zoom: 16,
    center: new google.maps.LatLng(33.260081, -117.279369),
    mapTypeId: google.maps.MapTypeId.ROADMAP,
    streetViewControl: false,
    draggable: true,
    scaleControl: false,
    zoomControl: true,                  
    panControl: true,                    
    scrollwheel: false,
    disableDoubleClickZoom: false,
    navigationControlOptions: {
    style: google.maps.NavigationControlStyle.ZOOM_PAN
}

map = new google.maps.Map(mapObject, mapOptions);

points.push(lat:'33.260081', lng:'-117.279369');
points.push(lat:'33.260079', lng:'-117.279371');
points.push(lat:'33.260083', lng:'-117.279373');

for (var i in points) {

    var point = points[i];

    var marker = initMarker(point);

    markers.push(marker);

    google.maps.event.addListener(marker, 'mouseover', function() {
        alert('mouseover');
    });

    google.maps.event.addListener(marker, 'click', function() {
        alert('click');
    });

    google.maps.event.addListener(marker, 'mouseout', function() {
        alert('mouseout');
    });

    bounds.extend(new google.maps.LatLng(point.lat, point.lng));
}

当我将鼠标悬停在标记上时,它会提示“mouseout”,然后“mouseover”两次。我希望它只用“鼠标悬停”提醒一次。

当我点击一个标记时,它会提示“点击”,然后是“鼠标移开”,然后是“点击”,然后是“鼠标悬停”。我希望它只是提醒“点击”。

当我禁用“mouseover”和“mouseout”时,“click”会按预期工作。当我禁用“点击”和“鼠标悬停”时,“鼠标悬停”会按预期工作。

为什么这些事件似乎相互关联?在 API v2 中,我们能够毫无问题地支持此功能。

提前致谢。

-- 编辑--

这似乎只发生在 Firefox 和 IE 中,Chrome 按预期处理事件。

-- 编辑--

我已经开始设置 2 个 map 演示,以便进行并排比较 可以做到。

版本 2 网址:http://map.ownij.com/index2.php

版本 3 网址:http://map.ownij.com/

版本 2 甚至 Firefox、IE、Chrome 中的监听器行为:

  • 鼠标悬停:鼠标悬停
  • 点击:点击
  • 鼠标悬停:鼠标悬停
版本 3 Firefox、IE 中的事件监听器行为:

  • 鼠标悬停:鼠标移出、鼠标悬停、鼠标悬停
  • 点击:点击,鼠标移开,点击
  • 鼠标移出:鼠标移出,鼠标移出

版本 3 甚至 Chrome 中的监听器行为:

  • 鼠标悬停:鼠标悬停
  • 点击:点击
  • 鼠标悬停:鼠标悬停

如您所见,v3 事件行为在 chrome 中按预期工作,但在 FF 和 IE,每个事件都会触发多个监听器,从而导致 不寻常的行为。

我们构建 map 以允许出现 map 气泡 当用户将鼠标悬停在标记上时,因此当鼠标悬停时触发 mouseout 事件,气泡会无限期地重新呈现,直到用户 将鼠标移离标记。

在解决此问题之前,我们无法发布 v3 升级, 否则我们会剥夺我们客户的当前功能。

-- 编辑--

更新代码,通过将警报更改为 console.log() 调用,事件按预期触发。对于非信息窗口调用(警报、气泡等),似乎存在一些不寻常的事件处理。

最佳答案

可能这些额外的事件是由 alert 引起的。尝试以不与鼠标交互的方式记录事件,例如使用 console.log(不确定现在是否可以在 internet exploder 中使用)。

简单地说,我的猜测是弹出窗口导致您的鼠标“鼠标移出”(和“鼠标悬停”弹出窗口)。等。当弹出窗口再次消失时,可能会导致其他事件。

关于javascript - Google Maps Api V3 - 将多个监听器分配给同一标记对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8394278/

相关文章:

javascript - 绑定(bind)到文本突出显示

javascript - 自动完成 : first item focused only when the user type on tab key

javascript - 在谷歌地图中围绕一个点绘制半径

javascript - Google Maps Javascript - 使标记弹跳

javascript 语法解释 (function () { } )();

javascript - 我的 Node forever 插件不工作

Android:Google map 不适用于 Phonegap

android - 谷歌方向和语音导航

javascript - 谷歌地图 : Hide country borders

javascript - Google Maps API 绘图自定义标记 : Need help understanding this example I found