使用event.target调用方法时获取未定义

时间:2017-01-21 12:42:40

标签: javascript events

对不起抽象的标题,但我不知道如何更好地解释我在这里处理的内容。所以基本上我想创建一个在另一个方法中添加eventlistener时使用的方法。

playerShips(obj) {
  let shipCounter = this.createCounter(obj.container);
  obj.element.addEventListener("click", this.addShipsEvent({
    counter: obj.counter,
    shipCounter: shipCounter
  }));
}

addShipsEvent(event, obj) {
    if ( event.target.getAttribute("class") === "cell" ) {
      event.target.classList.add("active");
      obj.counter += 1;
    } else {
      event.target.classList.remove("active");
      obj.counter -= 1;
    }     
}

当我运行它时,我收到以下错误:TypeError:无法读取属性' getAttribute'未定义的,这是对if ( event.target.getAttribute("class") === "cell" )

的反应

我做错了什么?

1 个答案:

答案 0 :(得分:0)

问题主要是因为“addEventListener”期望一个事件监听器作为第二个参数,但你只是执行“addShipsEvent”而不返回任何东西。 解决方案是简单地返回一个闭包。

addShipsEvent(obj) {
    return function(event) {
        if ( event.target.getAttribute("class") === "cell" ) {
          event.target.classList.add("active");
          obj.counter += 1;
        } else {
          event.target.classList.remove("active");
          obj.counter -= 1;
        }
    };
}

我希望这会对你有所帮助。