петля галереи изображений JS - PullRequest
0 голосов
/ 25 мая 2009
    var thumbs = document.getElementsByTagName("img");
    for (var i=0; i<thumbs.length; i++)
    {
        Core.addEventListener(thumbs[i], "click",  function() {alert(i);});
    }

В приведенном выше коде предупреждение всегда показывает 18. это количество миниатюр изображений. Я хочу, чтобы он показал, на какой эскиз я нажал. почему это не показывает это? Также мне нужно передать это значение по нажатой миниатюре вперед в другую функцию, чтобы я мог также отобразить следующее полное изображение. Может кто-нибудь, пожалуйста, помогите?

также, если есть лучший способ сделать это, пожалуйста, предложите. заранее большое спасибо.

1 Ответ

0 голосов
/ 25 мая 2009

Это потому, что внутренняя анонимная функция закрывает переменную i, поэтому она всегда будет показывать вам последнее значение итерации. Вы делаете следующее:

Core.addEventListener(thumbs[i], "click",  (function( j) 
                                           { 
                                               return function() 
                                                      {
                                                         alert(j);
                                                      };
                                            })(i));

Пояснение:

В вашем коде переменная итерации i является своего рода глобальной переменной для внутренних анонимных функций, которую вы создаете для обработчика событий, но вы должны заметить, что, хотя создается впечатление, что вы создаете другую анонимную функцию, все они смотрят на i, которая в более глобальный охват, и он все тот же я для всех них. Таким образом, последнее значение будет предупреждено, чтобы избежать его, я создал другую функцию-обертку для вас, чтобы заключить значение i в другую область видимости, чтобы другой элемент мог видеть другое предупреждение. Объяснение в комментариях также верно, я советую вашему Google закрыть Javascript и прочитать несколько статей о нем, как только вы поймете, что оно может стать очень мощным оборудованием.

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