закрытие в JavaScript - PullRequest
       5

закрытие в JavaScript

0 голосов
/ 24 мая 2011
function initialize(final) 
{
    if (GBrowserIsCompatible()) {
             ................................................
        }

        var address_array = final.split('~');

        for (var count = 0; count < address_array.length; count++) {
            if (geocoder) {
                geocoder.getLatLng(
        address_array[count],
        makeTheFunction(address_array, count)
    );
            }
        }

  }



  function makeTheFunction(array, thisCount) {
      return function (point) {
          if (!point) {
              alert(array[thisCount] + " not found");
          }


          else {
              var marker = new GMarker(point);
              map.addOverlay(marker);
              GEvent.addListener(marker, "click", function () {
                  marker.openInfoWindowHtml(array[thisCount] + "</b>");
              });
          }
      };
  }

Моя проблема в том, что я не могу получить доступ к array[thisCount] из раздела else, хотя он доступен из блока if. Т.е. alert(array[thisCount] + " not found"); работает пожалуйста помогите

Ответы [ 3 ]

0 голосов
/ 24 мая 2011

Доступен ли он в блоке else или в обработчике "click"? Если вы не можете получить array / thisCount только в своем обработчике click, пытались ли вы скопировать эти переменные? Может ли это быть проблемой с контекстами? Попробуйте это, если ваш массив виден внутри else блока:

function makeTheFunction(array, thisCount) {
  return function (point) {
      if (!point) {
          alert(array[thisCount] + " not found");
      }


      else {
          var item = array[thisCount];
          var marker = new GMarker(point);
          map.addOverlay(marker);
          GEvent.addListener(marker, "click", function () {
              marker.openInfoWindowHtml(item + "</b>");
          });
      }
  };

}

0 голосов
/ 24 мая 2011

Я полагаю, что в функции addListener что-то идет не так.В предоставленном коде thisCount в слушателе должно иметь замыкание на thisCount в функции makeTheFunction.

Следующее эмулирует следующий код:

<script type="text/javascript">

function init() {
  var count = 'the count';
  partTwo(makeFn(count));

  function makeFn(thisCount) {
    return function() {

      // Shows 'thisCount: the count'
      alert('thisCount: ' + thisCount);
      document.getElementById('btn0').addEventListener('click',
        function(){alert('thisCount: ' + thisCount);}, false);
    }
  }
}

function partTwo(fn) {
  fn();
}

window.onload = function() {
  init();
};

</script>

<!-- Shows 'thisCount: the count' -->   
<button id="btn0">Button 0</button>

Однако он подключает слушателя с помощью браузеров addEventListener, а не, по-видимому, пользовательских addListener.

0 голосов
/ 24 мая 2011
function makeTheFunction(array, thisCount) 
{         
          if (!point) 
          {
              alert(array[thisCount] + " not found");
          }
          else 
          {
              var marker = new GMarker(point);
              map.addOverlay(marker);
              GEvent.addListener(marker, "click", function () {
                  marker.openInfoWindowHtml(array[thisCount] + "</b>");
              });
          }
      return point;
  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...