我是一个编写网页的初学者,并希望在Google地图中显示一些带有infowindows的标记。但是,我发现infowindow总是显示最后记录的信息。通过stackoverflow中的上一篇文章的参考,我发现问题很可能是由javascript中的常见闭包问题引起的,但我发现很难理解如何在我的编码中解决问题。任何人都可以帮忙吗?
此外,我想问一个简单的HTML问题。如果PDF名称是编码中显示的变量,如何创建href。非常感谢!!!
var ShowAll=function() {
var URL2="Show_all_trig.php";
$.ajax({
url: URL2,
type: "POST",
dataType: "json",
success: function(data){
$.each(data, function(i, item) {
station_num = item.station_num;
trig_name = item.trig_name;
loc_x = item.loc_x;
loc_y = item.loc_y;
loc = new google.maps.LatLng(loc_x, loc_y);
var trigicon = 'images/Start2.png';
marker = new google.maps.Marker({
map: map,
position: loc,
icon: trigicon,
title: trig_name
})
markersArray.push(marker)
html = "<b>Trig. Station Name: </b>" + trig_name + "<br/> <b>Station Number: </b>" + station_num + "<br/> <b>Sketch: </b>" +"<a target='_blank' href= 'summarysheet/'+ 'station_num +'.pdf'>station_num</a>";
google.maps.event.addListener(marker, 'click', function() {
//alert (html);
infoWindow.setContent(html);
infoWindow.open(map, marker);
});
});
},
error:function(xhr, ajaxOptions, thrownError){
alert(xhr.status);
alert(thrownError);
}
});
}
答案 0 :(得分:0)
这是您正在寻找的技术:
(function(temp_html,temp_map,temp_marker) {
google.maps.event.addListener(temp_marker, 'click', function() {
infoWindow.setContent(temp_html);
infoWindow.open(temp_map, temp_marker);
});
}(html,map,marker));
简而言之,你在这里做的是(a)创建一个带有三个参数的匿名函数,(b)将html
,map
和marker
作为值传递给那些参数,以及(c)立即执行匿名函数。 temp_
变量包含在匿名函数中,对周围的代码不可见,因此名称为"closure."
(在你的情况下,看起来map
是一个全局变量,你不会真正需要传递给闭包。但无论如何这都不是坏事。 )