синтаксис JavaScript - почему функция не распознает внешний массив, который объявлен и заполнен - PullRequest
0 голосов
/ 06 сентября 2011

функция, которую я написал ниже, содержит массивы aarr и barr для хранения вызовов DOM, чтобы уменьшить обход DOM.Это работает прямо сейчас, но я хочу повторно использовать эти массивы в других функциях, поэтому я попытался переместить объявление массива и цикл for за пределы функции, функция выдает ошибку при достижении первой ссылки на aarr [i], как если быфункция не распознается aarr [].Я понимаю, что "VAR" даст область, но я попытался удалить / в том числе VAR, и он все еще не работает.

Пожалуйста, объясните

TIA

Это работает, когда aarr [] объявлен внутри функции (отредактировано, чтобы включить закрывающий тег для цикла "for")

function display (namearr, current) {

var aarr = [];
var barr = [];


for (var z=1; z<=10; z++) {
  c = z-1;
  aarr[c] = document.getElementById("a"+z);
  barr[c] = document.getElementById("b"+z);
 }

 var tldstr = document.getElementById("dlist").innerHTML;
    tldstr = tldstr.slice(0, -1)
    var tldarr = tldstr.split(",");

    index = current - 1;    
    var arrlen = tldarr.length;
    var img = "<img src='../loader1.gif' alt='loading' width='40' />";

    for (i=0; i<10; i++){


      if (index >= arrlen) {
            aarr[i].className = "tldn";
            barr[i].className = "tldn";


      }

      else if ( tldarr[index] == "n" || tldarr[index].length != 6) 
            {

            aarr[i].innerHTML = img;
            barr[i].innerHTML = img;


            }//close  first elseif
      else {
            tldstr = tldarr[index];

            aarr[i].className = "tld"+tldstr.charAt(0);
            barr[i].className = "tld"+tldstr.charAt(1);

           }//close second elseif

        index++;
        }//close first for loop

}

Это не работает (с объявлением "var" или без него), ошибки функции при первом обращении к aarr [i]

var aarr = [];
var barr = [];


for (var z=1; z<=10; z++) {
  c = z-1;
  aarr[c] = document.getElementById("a"+z);
  barr[c] = document.getElementById("b"+z);

function display (namearr, current) {
.
.
.
           aarr[i].className = "tldn"; //function errors out at first encounter of aarr[i]
.
.
.
}

Ответы [ 2 ]

0 голосов
/ 06 сентября 2011

Не думаю, что это проблема с переменной областью видимости, а с вашими индексами.Я не могу из примера выяснить, какими должны быть index и current, но в любом случае, если цикл for запускается до того, как dom будет готов, то ваши массивы, очевидно, пусты и индексирование будетзапутаться.

0 голосов
/ 06 сентября 2011

Вы также переместили цикл за пределы функции. Это, вероятно, не будет работать, так как это означает, что ваш getElementById работает во время загрузки скрипта. Дерево DOM не было построено, поэтому getElementById возвращает null.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...