0

Всем привет! Нужна помощь, пока зеленый в скрипте. Прошу помощи.

код

for(i=0; i<items.length; i++){
    items[i].addEventListener('click', addclass);
    var a = i;
function addclass(){
    for(number = 0; number &lt; 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 &lt; 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 &lt; 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 &lt; 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)))

  • Вы когда код копируете\воспроизводите - делайте это аккуртано. В программировании каждая точка\скобка важна. Посмотрите еще раз внимательно на пример с анонимной функцией. – Stepan Kasyanenko Apr 17 '19 at 04:07
  • достаточно было заменить var на let и все бы заработало. – Grundy Apr 17 '19 at 07:01
  • @Grundy - огромное спасибо. Еще учится и учится. Чем больше понимаешь, тем больше чувство что ничего не понимаешь))))) – demonn2012 Apr 17 '19 at 08:13

0 Answers0