Навешивание onClick в js

Рейтинг: 0Ответов: 1Опубликовано: 29.01.2015

Здравствуйте. Такая проблемка нарисовалась.

  <script type="text/javascript">
    for (i = 0; i < 10; i++){
    document.getElementsByClassName("someClass").item(i).onclick = function(){ someFunction(i)};
    }
    </script>

И теперь событие онклик будет вызывать функцию именно от i (которая к моменту реального вызова функции может быть чёрт знает какой), а не от её конкретного значения в момент присвоения слушателя. Это как-нибудь поправить получится? Только без использования jQuery.

Ответы

▲ 1Принят

Оберните обработчик в замыкание:

<script type="text/javascript">
    for (i = 0; i < 10; i++){
        document.getElementsByClassName("someClass").item(i).onclick = (function(n) {
            return function() {
                someFunction(n);
            };
        })(i);
    }
</script>

В JavaScript функции - единственные сущности, создающие свою область видимости, в отличие от других C-подобных языков, в которых свою область видимости создаёт каждый блок.