@Mekishimo

Почему не работает цикл в JS с применением коллекции элементов?

Доброго времени суток!
Краткое описание приложения

Делаю вспомогательный счетчик для контроля количества звонков. Есть несколько кнопок, нажимая по которым я плюсую по единице звонка в общую сумму, отображаемую для моего удобства и понимания скорости работы. Этим кодом я обрабатываю каждую кнопку (при щелчке мыши добавляется единица, записывается в куки, отдается в общий пул записи общего количества звонков и в расчетник количества звонков в день). dec2('count3', 'count3');
Этот кусок кода как раз плюсует единицу звонков и пишет в куки

Столкнулся с непониманием следующей ситуации:
данный код рабочий, но громоздкий(элементов всего 20)
...
var a = document.getElementsByClassName('decrement');
  a[0].onclick = function () {
		dec2('count1', 'count1');
		summCounter1();
		callsPerDay();
		callsOverall();
	}
	a[1].onclick = function () {
		dec2('count2', 'count2');
		summCounter1();
		callsPerDay();
		callsOverall();
	}
	a[2].onclick = function () {
		dec2('count3', 'count3');
		summCounter1();
		callsPerDay();
		callsOverall();
	}

...


хочу сократить до следующего
var a = document.getElementsByClassName('decrement');
	for (i = 0; i < a.length; i++) {
		a[i].onclick = function () {

			dec2('count'+(i+1), 'count'+(i+1);
			summCounter1();
			callsPerDay();
			callsOverall();
		}


В чем я ошибся или что просмотрел? Более чем уверен, что ошибка новичка.
  • Вопрос задан
  • 106 просмотров
Решения вопроса 2
yarkov
@yarkov Куратор тега JavaScript
Помог ответ? Отметь решением.
const decrements = document.querySelectorAll( '.decrement' );
for ( let i = 0; i < decrements.length; i++ ) {
    const decrement = decrements[ i ];
    const j = i + 1;
    decrement.onclick = function ( e ) {
        dec2( 'count' + j, 'count' + j );
        summCounter1();
        callsPerDay();
        callsOverall();
    }
}
Ответ написан
devellopah
@devellopah
какая-то ересь написана, чувак, но помогу

function handleClickFor(index, text) {
		a[index].addEventListener('click', function() {
			dec2(text, text);
			summCounter1();
			callsPerDay();
			callsOverall();
		});
	}

Array(3).fill().forEach(function(_, i) {
	handleClickFor(i, 'count' + (i + 1) )
})


p.s. тебе за это платят или ты просто для себя делаешь приложение(без обид)?
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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