Всем привет! Нужна помощь, пока зеленый в скрипте. Прошу помощи.
код
for(i=0; i<items.length; i++){
items[i].addEventListener('click', addclass);
var a = i;
function addclass(){
for(number = 0; number < items.length; number++){
items[number].classList.remove('active-items');
content[number].classList.remove('activeItems');
}
items[a].classList.add('active-items');
content[a].classList.add('activeItems');
}
}
прошу не бросаться тапками, если вопрос нубский. Сам пока нуб. нужно значение [i] при котором сработал листнер, передать в [a] Заранее благодарю
благодарю за наводку про "Почему асинхронная функция внутри цикла выполняет последнюю итерацию много раз?" попробовал листнер вкинуть в анонимную функцию, но он там к сожалению запускаться не хотел вот код - может чего неправильно делаю
function cn(){ console.log('click')}
for(var int=0; int<items.length; int++){
(function(int){items[int].addEventListener('click', cn)});
в таком варианте на клик реакции нет. Надеюсь гуру дадут пинок в нужном направлении. Сори за наглость, ранее программирование не изучал. В теме только пару недель. Так что за тупливо прошу прощение.
Теперь изложу суть своего творения
var items = document.querySelectorAll('.featuresAside__items');
var content = document.querySelectorAll('.NoactiveItems');
function cn(){ console.log('click')}
for(var int=0; int<items.length; int++){
(function(int){items[int].addEventListener('click', cn)});
function addclass(){
for(number = 0; number < items.length; number++){
items[number].classList.remove('active-items');
content[number].classList.remove('activeItems');
}
items[int].classList.add('active-items');
content[int].classList.add('activeItems');
}
}
есть группа элементов(типа вкладки), при клик на который у соседей удаляется класс выделение. На тот который кликнули применяется класс выделения. Контент меняется в зависимости от нажатой вкладки. Поэтому мне необходимо отследить на каком элементе произошел клик(на каком по щету в масиве) для того чтоб именно ему присвоить клас выделение и контент(в своем массиве- такой же по щету) присвоить клас отображения контента. Вот такая у меня стоит задача, если кто то сможет обяснить что к чему, буду премного благодарен. Возможно я просто выбрал не ту стратегию. ` Всем спасибо кто откликнулся. Заработало
var items = document.querySelectorAll('.featuresAside__items');
var content = document.querySelectorAll('.NoactiveItems');
for(var i=0; i<items.length; i++){
(function(i){
items[i].addEventListener('click', (function() {addclass(i)}));
})(i);
function addclass(a){
for(number = 0; number < items.length; number++){
items[number].classList.remove('active-items');
content[number].classList.remove('activeItems');
}
items[a].classList.add('active-items');
content[a].classList.add('activeItems');
console.log(a);
}
}
только в таком виде добился необходимого результата. Мозг кипит)) ` переписал код по другому
const items = document.querySelectorAll('.featuresAside__items');
const content = document.querySelectorAll('.NoactiveItems');
for(let i=0; i<items.length; i++){
items[i].addEventListener('click', addclass);
function addclass(){
for(number = 0; number < items.length; number++){
items[number].classList.remove('active-items');
content[number].classList.remove('activeItems');
}
items[i].classList.add('active-items');
content[i].classList.add('activeItems');
}
}
Безценный опыт получен. i'm happy)))
varнаletи все бы заработало. – Grundy Apr 17 '19 at 07:01