Если я правильно понял, Вы столкнулись с замыканиями.
Тема важная и лучше про неё почитать, а если коротко, то при срабатывании обработчика значение weeksCounter берётся не то, которое было на момент создания обработчика, а то, которое оно имеет на момент срабатывания обработчика, то есть последнее значение. Поэтому для всех обработчиков выводится одно и то же.
Обычно делают функцию, в которую передают текущее значение и там устанавливают обработчик, тем самым фиксируя значение, которое нужно для его работы.