Динамическое добавление слушателей в Google Maps, где iframe src устанавливается по-разному для каждого маркера. - PullRequest
1 голос
/ 16 января 2010

Привет, я прочитал статьи и отличную статью о размерах и замыканиях Роберта Наймана. Однако я не могу заставить это работать. Я пытаюсь назначить событие mouseover различным маркерам, а затем установить iframe src в зависимости от маркера, наведенного поверх. Я получаю печально известную последнюю запись для каждого события мыши. Я играл с ним в течение большей части нескольких дней, и даже «мыслительная жидкость» не помогает :). Любое руководство ценится

для (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 ]

1 голос
/ 17 января 2010

«Мыслительная жидкость не работает» - ясность мыслей по утрам работает. Я решил это, посмотрев немного повнимательнее на то, что я делал. У меня была проблема с закрытием и я даже не передавал правильную переменную в функцию, которую создавал. Это работает - но спасибо за идеи.

для (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));
                       }
1 голос
/ 16 января 2010

Я думаю, что вы можете решить свою проблему, обернув свой блок в самовыполняющуюся функцию-обертку:

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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...