javascript - 信息窗口显示在错误的位置

标签 javascript google-maps-api-3

我的网页没有什么问题。当我试图在标记上显示 InfoWindow 时。该窗口显示在 map 的左上角而不是标记上。就像在下面的屏幕中一样: enter image description here

这是我用来放置标记和使用 InfoWindows 的脚本。

var infowindow;
function point(name, lat, long) {
    var self = this;
    self.name = name;
    self.lat = ko.observable(lat);
    self.long = ko.observable(long);

var marker = new google.maps.Marker({
    position: new google.maps.LatLng(lat, long),
    title: name,
    map: map,
    draggable: true
});

//if you need the poition while dragging
google.maps.event.addListener(marker, 'drag', function () {
    var pos = marker.getPosition();
    this.lat(pos.lat());
    this.long(pos.lng());
}.bind(this));

//if you just need to update it when the user is done dragging
google.maps.event.addListener(marker, 'dragend', function () {
    var pos = marker.getPosition();
    this.lat(pos.lat());
    this.long(pos.lng());
}.bind(this));

google.maps.event.addListener(marker, 'mouseover', function () {
    infowindow = new google.maps.InfoWindow({ content: "empty" });
    console.log(marker.title);
    infowindow.setContent(marker.name);
    infowindow.open(map, marker);

}.bind(this));


}

var map = new google.maps.Map(document.getElementById('googleMap'), {
    zoom: 5,
    center: new google.maps.LatLng(55, 11),
    mapTypeId: google.maps.MapTypeId.ROADMAP
});

var viewModel = {
    points: ko.observableArray([
        new point('Test1', 55, 11),
        new point('Test2', 56, 12),
        new point('Test3', 57, 13)])

};
function addPoint() {
    viewModel.points.push(new point('a', 58, 14));
}

ko.applyBindings(viewModel);

这里全部在 jsfiddle 上:http://jsfiddle.net/24q8n/

最佳答案

您正在使用 marker.name,它是 undefined。 因此,您将 undefined 分配给 setContent 显然会阻止 infoWindow 工作并最终出现在左上角。 删除 infowindow.setContent(marker.name) 或将其替换为具有类似 marker.title 值的内容。或者在定义var marker = ...时定义marker.name:

var marker = new google.maps.Marker({
    position: new google.maps.LatLng(lat, long),
    title: name,
    name: name, // define the name so setContent(marker.name) will work.
    map: map,
    draggable: true
});

或者删除产生问题的行:

google.maps.event.addListener(marker, 'mouseover', function () {
    infowindow = new google.maps.InfoWindow({ content: "empty" });
    console.log(marker.title);
    // This line gives you the problem because marker.name is undefined.
    // infowindow.setContent(marker.name);
    infowindow.open(map, marker);    
}.bind(this)); 

关于javascript - 信息窗口显示在错误的位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20740295/

相关文章:

javascript - 将数组的每个元素与其后的元素组合

javascript - 使用 websockets 的 Web 应用程序 “Could not establish connection. Receiving end does not exist."

javascript - 是什么让这个伪 GUID 生成器比 math.random() 更好?

javascript - 使用 google maps api v3 折线捕捉到道路

javascript - 如何更好地跟踪 Google Analytics 中的 Google 图片搜索流量? [具体关键词]

javascript - 调整浏览器窗口大小时禁用 jquery 插件

javascript - 如何删除点击时的谷歌地理编码

php - Google Maps API 3 - 使用 PHP 从 MySQL DB 中提取标记

javascript - 我们如何在 google map api 中通过 javascript 设置标记标签内容?

python - 从 Pandas 数据框到 Google Map API 的 json 文件