最佳答案
我尝试使用 for 循环将事件侦听器添加到多个对象中,但最终所有侦听器都针对同一个对象—— > 最后一个。
如果我通过为每个实例定义 boxa 和 boxb 手动添加侦听器,那么它就可以工作。我想是 addEvent for-loop 没有按照我希望的方式工作。也许我完全用错了方法。
使用 class = “ Container”的4个示例 4号集装箱的引爆装置按照预期的方式工作。 在容器4上的容器1,2,3触发器事件上触发,但仅当触发器已被激活时触发。
// 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>