【问题标题】:google map click on markers谷歌地图点击标记
【发布时间】:2012-09-27 06:54:32
【问题描述】:

我有一张地图和多个标记。我已经在地图容器上附加了一个click 事件,以使用动画使地图上显示的所有内容(我有图例、时间线等)消失。

我的问题是,当您单击标记以查看 infoWindow 时,它还会触发地图上的 click 事件,该事件会在地图上的图层对象上消失。所以,我想防止地图容器已经分配事件,当点击标记时,只会出现 infoWindow 而不会出现其他任何内容。

这里是地图点击事件:

$('#map_canvas').bind('mousedown', function() { ...

我在标记上唯一能看到的是,它们都具有相同的类:gmnoprint

这个我已经测试过了:

$('#map_canvas').not('.gmnoprint').bind('mousedown', function() { ...

和:

$('#map_canvas').bind('mousedown', function() {

    if ($(this).is('.gmnoprint'))
        return false;
....

但它们都不起作用。有谁知道如何解决这个问题?

提前致谢!

【问题讨论】:

    标签: jquery google-maps google-maps-markers


    【解决方案1】:

    你的问题是

    $('#map_canvas').bind(...
    

    那些标记/信息窗口在 map_canvas div 中,所以你在技术上点击它

    【讨论】:

    • 是的,完全正确!我知道:(
    【解决方案2】:

    我会尝试使用 google maps API 事件侦听器,因为它们在与地图元素交互时最可靠:

    https://developers.google.com/maps/documentation/javascript/events https://developers.google.com/maps/documentation/javascript/overlays#InfoWindows

    这是 gmaps API 中用于绑定单击以打开与标记关联的信息窗口的基本语法:

    google.maps.event.addListener(marker, 'click', function() {
        infowindow.open(map,marker);
    });
    

    希望这会有所帮助!

    【讨论】:

    • 谢谢,我正在使用相同的。但是如何防止点击标记时不触发地图点击事件呢?
    【解决方案3】:

    您必须捕获event,然后调用event.preventDefault,其中您有.click 函数用于infoWindow。

    【讨论】:

      【解决方案4】:

      你可以这样做

          <div id="map_canvas" class="foo"></div>
      
      
      $("#map_canvas").hasClass("foo").click(function(){
      
       $(this).removeClass("foo")
      })
      

      【讨论】:

      • 这似乎很棘手,你能解释一下它是如何解决这个问题的吗?谢谢。 :)
      • @Mahdi 只需向 div 添加一个类 foo 并在该类上进行单击事件,然后删除该类。如果该类不存在,则不会调用进一步的单击事件。所以infoWindow 将保持可见,并且不会在地图上调用单击事件。Atlast 再次将类添加到 map 以激活单击处理程序
      • 我明白现在好多了,但不确定我是否可以实现。我在那里发生了其他事情,这并不像我上面解释的那样简单。但是,谢谢,似乎是一个可行的解决方案。我现在要测试一下... :)
      猜你喜欢
      • 1970-01-01
      • 2017-10-20
      • 2011-10-11
      • 1970-01-01
      • 1970-01-01
      • 2012-01-31
      • 2012-12-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多