1

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

for(var i=0; 我

                        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)
                              });



                    }
4

2 回答 2

1

“思维液不起作用”——早上思路清晰会起作用。我通过更仔细地查看我在做什么来解决它。我遇到了一个关闭问题,甚至没有将正确的变量传递给我正在创建的函数。这有效 - 但感谢您的想法。

for(var i=0; 我

                            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));
                       }
于 2010-01-16T21:05:25.640 回答
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);
于 2010-01-16T20:40:34.527 回答