javascript - 数组值作为 if else 的条件 - JS

标签 javascript arrays if-statement

我一直试图理解为什么每当我单击数组的值时,它总是添加类“foo”。

示例:我单击了伦敦(城市[1],对吗?),它添加了 foo 类。

var cities = [
document.getElementById('Paris'),
document.getElementById('London'),
document.getElementById('Berlin')
];


for (var i = 0; i < cities.length; i++) {
  cities[i].onclick = test;

  function test(){
    if(cities[i] === cities[0]) {
      el.classList.add("foo");
    }
  }
}

最佳答案

编辑:我原来的答案不正确,这个更新的答案是正确的。 addEventListener 不返回任何内容。相反,您应该使用某种包装器来添加和删除监听器,这样您就不会在不使用的监听器上浪费资源:

function on (element, eventName, callback) {
    element.addEventListener(eventName, callback);
    return function unregister () {
        element.removeEventListener(callback);
    }
}

function test (event) {
    if (event.currentTarget===cities[0]) {
        event.target.classList.add('foo');
    }
}

var listenerRemovers = cities.map(function (city) {
    return on(city, 'click', test);
});

现在,您可以通过调用 listenerRemovers 数组中的相应函数来删除任何这些监听器:

listenerRemovers.forEach(function (unRegisterFunc) { unRegisterFunc(); });

原来的错误答案:

就其值(value)而言,在这种情况下您可能最好使用 .map,因为最佳实践是保留对事件监听器的引用,以便您可以在需要时取消它们。

function test (event) {
    if (event.currentTarget===cities[0]) {
        event.target.classList.add('foo');
    }
}

var listenerHandlers = cities.map(function (city) {
  return city.addEventListener('click', test);
});

关于javascript - 数组值作为 if else 的条件 - JS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23373006/

相关文章:

php - 重写这个重复的 if 语句的最佳方法是什么?

python - 一行代码来保存 if 语句的值(value)?

javascript - 实现 Famo.us

javascript - 如何更改 winston 日志格式?

javascript - 无法更改 react 控制输入的值

c - 对具有通用大小的结构数组进行排序

c - C中n数组的交集和并集

c - 'fopen' 将如何解释一个容量大于它包含的字符串的 'char[]'?

java - 按下重置按钮后出现 NullPointerException。 (加工)

javascript - jQuery - 像单选按钮一样的复选框