【问题标题】:Google Maps infowindow closeclick event (function parameter)Google Maps infowindow closeclick 事件(函数参数)
【发布时间】:2014-02-02 06:07:11
【问题描述】:

我的网络应用程序使用以下 popup-overlay 插件在屏幕上的弹出窗口中显示配置文件内容:
http://vast-eng.github.io/jquery-popup-overlay/

我的问题与我在弹出窗口中使用的 Google 地图 - 标记信息窗口有关。
当我尝试关闭信息窗口时,弹出窗口也会消失。
这是错误的!我没有立即明白它为什么这样做。
如果我找不到解决方案,我可以禁用或隐藏 X,但我不想这样做。

以下链接中的“where”部分显示了问题:
http://www.zwoop.be/dev/#list/bars/1

编辑 event 参数为以下事件侦听器返回“未定义”:

google.maps.event.addListener(self.marker.infowindow, "closeclick", function(e)
    {
        console.log(e); 
    });

谢谢

编辑2 这是一个说明问题的快速小提琴:
http://jsfiddle.net/462HF/

【问题讨论】:

  • 我相信 undefined 是正确的。你会在那里期待什么?尝试创建一个带有弹出窗口、地图和信息窗口的 jsfiddle,然后我们可能会提供进一步的帮助。
  • 我曾希望通过 stopPropagation 防止事件冒泡到父元素。
  • 这是一个说明问题的小提琴:jsfiddle.net/462HF
  • 哇,真奇怪。还不明白为什么会这样……
  • 讨厌的问题,很烦人。顺便说一句,我注意到我将“map”作为参数传递给了小提琴中的初始化函数。这显然是一个错误。我很快就编造了小提琴,但问题仍然存在。我正在构建的应用程序基于backbone.js。

标签: javascript jquery google-maps-api-3 overlay infowindow


【解决方案1】:

当您单击谷歌地图上 infoWindow 中的“X”时,会调用弹出叠加插件中的模糊功能,这就是整个弹出窗口关闭的原因。下面是 jquery.popupoverlay.js 文件中的代码:

if (options.blur) {
            blurhandler = function (e) {
                if (!$(e.target).parents().andSelf().is('#' + el.id)) {
                    methods.hide(el);
                }
            };
        }

“X”是一个图像,它的parents()只返回InfoWindow div,而不是popup div。因此,它会调用methods.hide(el) 并关闭弹窗。

可能有更好的方法来确定它是否被点击,但将其更改为以下工作。它只是检查目标的 img 源:

if (options.blur) {
            blurhandler = function (e) {
                if (!$(e.target).parents().andSelf().is('#' + el.id) ) {
                    if(!($(e.target).attr('src') === 'http://maps.gstatic.com/mapfiles/api-3/images/mapcnt3.png'))
                        methods.hide(el);
                }
            };
        }

【讨论】:

  • 感谢您帮助我!我遵循了您的指导方针,并在标签上添加了条件。没有 img 应该触发隐藏,我不确定 img 源是否永远相同。 if(!($(e.target).prop("tagName") === 'IMG'))你确实解决了我的问题,谢谢!
猜你喜欢
  • 2017-11-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-10
  • 1970-01-01
  • 2023-04-10
  • 2012-03-29
  • 2017-04-01
相关资源
最近更新 更多