如何从构造函数中定义的HTML调用类方法?

问题描述 投票:1回答:1
class Hello {
  constructor() {
    this.handleClick = this.handleClick.bind(this);
    this.htmlContent = `<a onclick="this.handleClick">Button</a>`;
  }
  handleClick(e) {
    console.log('world');
  }
}

HTML看起来像:

<div id="main"></div>

“按钮”链接被添加到页面中,如下所示:

const myHello = new Hello();
document.getElementById('main').innerHTML = myHello.htmlContent;

但是,单击“按钮”不会在控制台中记录“世界”。

或者,这些不起作用:

onclick="()=> this.handleClick()"
onclick="this.handleClick()"

我的猜测是,这只能在addEventListener设置在innerHTML之后用#main完成,因为在那之前myHello.htmlContent只是一个字符串?

javascript html class constructor event-handling
1个回答
1
投票

你需要使HTMLElement成为Hello的一部分,并在innerHTML构造函数的Hello之后立即绑定事件处理程序。

class Hello {
  constructor(ele) {
    this.ele = ele;
    this.handleClick = this.handleClick.bind(this);
    ele.innerHTML = `<a onclick="this.handleClick">Button</a>`;
    ele.querySelector("a").addEventListener( "click", this.handleClick );
  }
  handleClick(e) {
    console.log('world');
  }
}

var ele = document.getElementById('main');
const myHello = new Hello( ele );
<div id="main"></div>
© www.soinside.com 2019 - 2024. All rights reserved.