ArturAralin
@ArturAralin
Программист, Музыкант

Почему обработчик событий возвращает одно и тоже значение?

Всем привет! Есть у меня примерно такой код

cDay = angular.element('<span>' + day.getDate().toString() + '</span>').bind('click', function() {
            this.week = weeksCounter;
            console.log(this.week)
            return false;
});
element.append(cDay)

Тут весь код: pastebin.com/UNwLBR4v

В результате получается календарь, только по клике на какой-либо из дней, он выдает номер последней недели, а не той в которой он должен находиться. При этом, когда я вывожу console.log(this) devTools показывает на нужный элемент.
  • Вопрос задан
  • 2282 просмотра
Пригласить эксперта
Ответы на вопрос 2
@IceJOKER
Web/Android developer
Если что-то делается в цикле, а потом результат получаете только последнего элемента, то в 99% случаев из-за перезаписи .
Не хочу вникаться в код, но рекомендую объявить функцию к примеру function handler(){} - и в этой функции делать обработку и эту функцию передать вторым аргументом bind.
Ответ написан
v_decadence
@v_decadence
Если я правильно понял, Вы столкнулись с замыканиями.
Тема важная и лучше про неё почитать, а если коротко, то при срабатывании обработчика значение weeksCounter берётся не то, которое было на момент создания обработчика, а то, которое оно имеет на момент срабатывания обработчика, то есть последнее значение. Поэтому для всех обработчиков выводится одно и то же.
Обычно делают функцию, в которую передают текущее значение и там устанавливают обработчик, тем самым фиксируя значение, которое нужно для его работы.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы