Задать вопрос
@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 просмотров
Подписаться 1 Оценить Комментировать
Решения вопроса 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. тебе за это платят или ты просто для себя делаешь приложение(без обид)?
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы
OfferCase Москва
от 400 000 ₽
ITK academy Нижний Новгород
от 80 000 до 120 000 ₽
Future Москва
от 50 000 до 70 000 ₽