当前位置: 首页 > 面试题库 >

尝试将多个InfoWindows绑定到Google Map上的多个标记,但失败

壤驷高旻
2023-03-14
问题内容

我的项目使用JSON提要来获取有关指定纬度和经度边界内地震的信息,本质上是一个盒子。我获取此信息,并将所有结果转换为Google地图上的标记。我还需要每个标记还显示一些其他信息,因此我尝试使用内置的InfoWindow对象,以便在单击标记时打开带有该标记相关信息的工具提示。但是,我发现无论单击什么标记,相同的信息窗口始终位于该组的相同标记之上,并且我相信它始终是循环中创建的最后一个信息窗口。这是代码

$.getJSON(url, function(json) {
                    for(var i = 0; i < json.earthquakes.length; i++)
                    {
                        var pos = new google.maps.LatLng(json.earthquakes[i].lat, json.earthquakes[i].lng);
                        var info = json.earthquakes[i].lat + ", " + json.earthquakes[i].lng;
                        var marker = new google.maps.Marker({
                            map: map, 
                            position: pos,
                            title: json.earthquakes[i].eqid
                        })
                        var tooltip = new google.maps.InfoWindow({
                            content: info
                        })
                        google.maps.event.addListener(marker, 'click', function() {
                            tooltip.open(map, marker);
                        });
                        markers.push(marker);
                        tooltips.push(tooltip);
                    }               
                });

markers是地图上所有标记对象的数组,工具提示是用于存储信息窗口对象的另一个数组。他们是全球性的。


问题答案:

这是google-maps标记中的一个非常常见的问题,很容易犯:)。

发生的事情是您的click事件被异步调用,并且它正在getJSON回调(列表中的最后一个)中的marker变量中获取当前值。

您需要将addListener调用包装在一个函数中,以便围绕单击回调中使用的标记变量创建一个闭包:

function listenMarker (marker)
{
    // so marker is associated with the closure created for the listenMarker function call
    google.maps.event.addListener(marker, 'click', function() {
                        tooltip.open(map, marker);
                    });
}

然后从主getJSON回调(当前正在调用addListener)中调用listenMarker。



 类似资料:
  • 我想添加多个点击激活的标记和信息。我有麻烦,以显示相关的信息标记,点击后,相同的信息标记为所有标记打开。 信息来自for循环这是代码

  • 我试图添加多个标记,每一个都有自己的信息,当点击时会出现。当我尝试时,我很难得到infowindows来,它要么只显示一个标记,而没有InfoWindow。 谢谢,如果你需要更多的信息,请告诉我

  • var Rafael=new google.maps.latlng(52.341949,6.682236);var Aandagt=new google.maps.latlng(52.341949,6.782236); 任何帮助或建议如何添加和附加2个信息,一个为标记'Rafael'和一个为标记'Aandagt'将非常感谢。 查看当前地图:http://www.imrafaelhi.nl/stag

  • 我有6个输入框,每个输入框有4位数字。输入4位数字后,光标将自动转到下一个输入框。所有这些都是强制性的。 现在,可以在“onChange”事件中将自动聚焦设置为下一个文本框。但如何将这6个输入框的值绑定到表单上的一个字段。我有办法吗?

  • 我正在开发一个简单的Java程序来完成一些简单的mySQL内容。它有一个用JavaFX制作的小GUI。 GUI的控制器有一个SimpleBoleanProperty,我们称之为X,它指示到数据库的连接状态。我将一些简单的东西绑定到它,比如按钮的disableProperty so send querys,如果没有连接,应该禁用它。到现在为止,一直都还不错。 我有一个标签,用于执行以下操作: 如果X

  • 我想做的是: 我有一个JavaFX窗口,我通过拖动不断改变它的宽度和高度。然后的文本具有以下格式: 例子: 我想使用绑定,而不是使用2(两)个ChangeListeners来实现这一点。 我也读过这个问题JavaFX绑定到多个属性