在Google地图中动态添加侦听器,其中iframe src针对每个标记设置不同

时间:2010-01-16 19:09:14

标签: javascript google-maps google-maps-markers event-listener

您好,我已经阅读了Robert Nyman的文章和关于范围和封闭的优秀文章。  但是,我不能让这个工作。我正在尝试将鼠标悬停事件分配给各种标记,然后根据鼠标悬停设置iframe src。我得到了每个mouseover事件的臭名昭着的最后一个条目。我已经玩了几天的大部分时间,甚至没有“思维流体”帮助:)。任何指导赞赏

for(var i = 0; i

                        var latlngr = new google.maps.LatLng(mylatd,mylongd);
                        markerno = "marker_"+i;
                        markerarray[i] = new google.maps.Marker({
                                                                position: latlngr,
                                                                map: map,
                                                                title:myname
                                                                });
                             google.maps.event.addListener(markerarray[i], 'mouseover', function(markerno)
                              {return function()
                                {
                               mysrc = 'http://adds.aviationweather.gov/metars/index.php?submit=1&station_ids='+myicao+'&chk_metars=on&chk_tafs=on&std_trans=translated';
                               alert (mysrc);
                               $('#weather').attr({src: mysrc});
                              }(markerno)
                              });



                    }

2 个答案:

答案 0 :(得分:1)

我认为您可以通过将块包装在自动执行的包装函数中来解决您的问题:

for(var i = 0; i < someLength; i++) (function(i){
  // Your internal code here. i will be bound to it's value in the correct context
})(i);

答案 1 :(得分:1)

'思维流体不起作用' - 早晨的思想清晰度确实如此。我通过仔细观察我正在做的事情来解决它。我有一个闭包问题,甚至没有将正确的变量传递给我正在创建的函数。这有效 - 但感谢您的想法。

for(var i = 0; i

                            var latlngr = new google.maps.LatLng(mylatd,mylongd);
                                            markerarray[i] = new google.maps.Marker({
                                                                    position: latlngr,
                                                                    map: map,
                                                                    title:myname
                                                                    });
                                 google.maps.event.addListener(markerarray[i],                  'mouseover', 
                                  function(myair)
                                  {return function()
                                  {
                                   mysrc = 'http://adds.aviationweather.gov/metars/index.php?submit=1&station_ids='+myair+'&chk_metars=on&chk_tafs=on&std_trans=translated';

                                   $('#weather').attr({src: mysrc});
                                  };}

                                  (myicao));
                       }