Google Map API中循环标记的常见关闭问题

时间:2013-05-10 13:58:32

标签: jquery google-maps-markers

我是一个编写网页的初学者,并希望在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); 
             }

        });
}

1 个答案:

答案 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)将htmlmapmarker作为值传递给那些参数,以及(c)立即执行匿名函数。 temp_变量包含在匿名函数中,对周围的代码不可见,因此名称为"closure."

(在你的情况下,看起来map是一个全局变量,你不会真正需要传递给闭包。但无论如何这都不是坏事。 )