Я пытаюсь добавить слушатель событий к нескольким объектам, используя цикл for, но в итоге все слушатели нацеливаются на один и тот же объект → последний.
Если я добавлю слушателей вручную, определив boxa и boxb для каждого экземпляра, это сработает. Я думаю, это цикл for addEvent, который работает не так, как я надеялся. Может быть, я вообще использую неправильный подход.
Пример использования 4 класса = "контейнер" Триггер на контейнере 4 работает так, как он должен. Триггер для контейнера 1,2,3 триггерного события в контейнере 4, но только если триггер уже активирован.
// Function to run on click:
function makeItHappen(elem, elem2) {
  var el = document.getElementById(elem);
  el.style.backgroundColor = "red";
  var el2 = document.getElementById(elem2);
  el2.style.backgroundColor = "blue";
}
// Autoloading function to add the listeners:
var elem = document.getElementsByClassName("triggerClass");
for (var i = 0; i < elem.length; i += 2) {
  var k = i + 1;
  var boxa = elem[i].parentNode.id;
  var boxb = elem[k].parentNode.id;
  elem[i].addEventListener("click", function() {
    makeItHappen(boxa, boxb);
  }, false);
  elem[k].addEventListener("click", function() {
    makeItHappen(boxb, boxa);
  }, false);
}
<div class="container">
  <div class="one" id="box1">
    <p class="triggerClass">some text</p>
  </div>
  <div class="two" id="box2">
    <p class="triggerClass">some text</p>
  </div>
</div>
<div class="container">
  <div class="one" id="box3">
    <p class="triggerClass">some text</p>
  </div>
  <div class="two" id="box4">
    <p class="triggerClass">some text</p>
  </div>
</div>