1

我是一个写网页的初学者,想用 infowindows 在谷歌地图中显示一些标记。但是,我发现信息窗口总是显示最后记录的信息。参考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); 
             }

        });
}
4

1 回答 1

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和in 作为这些参数的值,以及 (c) 立即执行匿名函数map。变量包含在匿名函数中,对周围的代码不可见,因此得名marker闭包”。temp_

(在您的情况下,它看起来像是map一个全局变量,您实际上并不需要将其传递给闭包。但无论如何这并不是一件坏事。)

于 2013-05-10T14:00:51.713 回答