有什么方法可以从外面的桌子打开标记的信息窗口。我也看过“stackoverflow”中其他用户的其他帖子,看起来有点棘手。
这是我正在使用的代码。在最后两行代码中,我将推文附加到一个表格中,如果我想点击任何一条推文,它应该在地图上打开相应的标记。问题是我不知道如何链接标记和表格行。
function geocode(user, date, profile_img, text, url, location) {
var geocoder = new google.maps.Geocoder();
geocoder.geocode({
address: location
}, function (response, status) {
if (status == google.maps.GeocoderStatus.OK) {
var x = response[0].geometry.location.lat(),
y = response[0].geometry.location.lng();
var myLatLng = new google.maps.LatLng(x, y);
var marker = new google.maps.Marker({
icon: profile_img,
title: user,
map: map,
position: myLatLng
});
var contentString = '<div id="content">' + '<div id="siteNotice">' + '</div>' + '<h2 id="firstHeading" class="firstHeading">' + user + '</h2>' + '<div id="bodyContent">' + text + '</div>' + '<div id="siteNotice"><a href="' + url + '"></a></div>' + '<p>Date Posted- ' + date + '.</p>' + '</div>';
var infowindow = new google.maps.InfoWindow({
content: contentString
});
google.maps.event.addListener(marker, 'click', function () {
infowindow.open(map, marker);
});
$('#user-tweets').css("overflow","scroll");
$('#user-tweets').append('<table width="320" border="0"><tr><td onclick=infoWindow(map,marker); colspan="2" rowspan="1">'+user+'</td></tr><tr><td width="45"><a href="'+profile_img+'"><img src="'+profile_img+'" width="55" height="50"/></a></td><td width="186">'+text+'</td></tr></table><hr>');
function infoWindow(map,marker){
infowindow.open(map, marker);
}
bounds.extend(myLatLng);
答案 0 :(得分:2)
ak_47,
假设未提供的括号和花括号都在提供的代码后关闭......
首先为外部作用域中的冗长HTML字符串制作模板 - 即。在function geocode(){}
之外 - 在某个地方定义一次,而不是每次都需要它们。
var templates = [];
templates[0] = '<div><div></div><h2 class="firstHeading">%user</h2><div>%text</div><div><a href="%url"></a></div><p>Date Posted- %date.</p></div>';
templates[1] = '<table width="320" border="0"><tr><td class="user" colspan="2" rowspan="1">%user</td></tr><tr><td width="45"><a href="%profile_img"><img src="%profile_img" width="55" height="50" /></a></td><td width="186">%text</td></tr></table><hr />';
您将看到我删除了ID,否则每次使用模板时都会重复这些ID。 Id在重复时会失去目的。
然后使用以下内容将所有内容从var contentString = ...;
替换为function infoWindow(map,marker){...}
var infowindow = new google.maps.InfoWindow({
content: templates[0].replace('%user',user).replace('%text',text).replace('%url',url).replace('%date',date);
});
var $tweet = $(templates[1].replace('%user',user).replace(/%profile_img/g,profile_img).replace('%text',text));
$('#user-tweets').css("overflow","scroll").append($tweet);
function openInfoWindow() {
infowindow.open(map, marker);
}
google.maps.event.addListener(marker, 'click', openInfoWindow);
$tweet.find(".user").on('click', openInfoWindow);
您会看到function openInfoWindow()
不接受参数。相反,它通过闭包获取map
和marker
(它们在外部范围中定义)。这允许openInfoWindow
通过名称附加在两个位置 - 作为标记的处理程序单击和推特点击(这是您想要的)。
这可能不是100%正确,因为我必须做出假设,但它至少应该让你知道如何处理这个问题。