【问题标题】:Google Maps API V3, Listener is behaving strangelyGoogle Maps API V3,Listener 行为异常
【发布时间】:2011-07-11 10:46:17
【问题描述】:

我创建了一堆标记和信息框,我想通过侦听器将它们链接在一起,尽管侦听器似乎在没有任何点击的情况下在开始时触发,并且如果我尝试通过点击标记来触发侦听器(之后关闭盒子)什么都没有发生。

//Load Markers
function LoadData() {
    //Space Reservation
    var site_arr  = new Array();
    var point_arr = new Array();
    var pasta_arr = new Array();
    //Load All Information
    point_arr = [new google.maps.LatLng(38.629343,-9.191592),
                 new google.maps.LatLng(38.649187,-9.189205)];

    site_arr = ["AAA","BBB"];

    pasta_arr = [1,2];

    //Create Markers and Set InfoBoxes
    for(var i = 0 ; i < site_arr.length ; i++){
        marker_arr[i] = new google.maps.Marker({
               position: point_arr[i]
               ,map: map
               ,title: site_arr[i]
                });

            window_arr[i] = new InfoBox({
             content: site_arr[i]
            });
            google.maps.event.addListener(marker_arr[i], 'click', function(i){
           window_arr[i].open(map,marker_arr[i]);
            }(i));
            }
    return 0;
}

有人知道发生了什么吗?

解决了这个问题,我只是发布它,因为它可能对其他人有用...... 谢谢大家!

//加载标记 函数加载数据(){ //空间预留 var site_arr = 新数组(); var point_arr = new Array(); var pasta_arr = new Array(); //加载所有信息 point_arr = [新 google.maps.LatLng(38.629343,-9.191592), 新的 google.maps.LatLng(38.649187,-9.189205)];

site_arr = ["AAA",
            "BBB"];

pasta_arr = [1,2];

//Create Markers and Set InfoBoxes
for(i = 0 ; i < site_arr.length ; i++){
    marker_arr[i] = new google.maps.Marker({
        position: point_arr[i]
        ,map: map
        ,title: site_arr[i]
        ,icon: "http://labs.google.com/ridefinder/images/mm_20_red.png"
    });

    marker_arr[i]._info = new InfoBox({
         content: pasta_arr[i];
    });
    attachListener(marker_arr[i]);
}
return 0;

}

函数附加监听器(标记){ google.maps.event.addListener(标记,“点击”,函数(){ 标记._info.open(地图,标记); }); 返回0; }

【问题讨论】:

    标签: google-maps-api-3 listener


    【解决方案1】:

    您不是向侦听器添加函数,而是函数值。您显示信息窗口是因为您在LoadData() 期间评估了i 处的侦听器function(i)。第二个问题是,即使您删除评估,您也不会在侦听器调用期间获得预期的索引i。正确的方法是这样的:

    marker_arr[i]._info = window_arr[i];
    google.maps.event.addListener(marker_arr[i], 'click', function() {
        var marker = this;
        marker._info.open(map, marker);
    });
    

    【讨论】:

    • 我现在确实明白为什么监听器会自行触发,但您的建议仍然不起作用,现在无论单击什么标记,信息框都会显示最后一个标记的信息,并在最后一个标记位置!
    • 我的第一个答案是一个建议。我现在对其进行了改进,使其可以完全正常工作。
    猜你喜欢
    • 2023-04-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多