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

标签 javascript html class constructor event-handling

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()"

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

最佳答案

您需要使 HTMLElement 成为 Hello 的一部分,并在 innerHTML by Hello 后尽快绑定(bind)事件处理程序构造函数

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>

关于javascript - 如何从其构造函数中定义的 HTML 调用类方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49063685/

相关文章:

html - 在 Windows 上调试 Ipad Web 应用程序

c++ - 我可以通过此类的实例访问类的成员类型吗?

html - 大纲 :none is not working on input tags

javascript - `JSON.stringify` 省略数组中的自定义键

javascript - JavaScript setTimeout 如此不准确的原因是什么?

javascript - 无法使用 JSON 中的 AngularJS 路径显示图像

html - 将 connect.sid 存储在 localStorage 而不是 cookie

Java面试: for loop,对象/类引用和绑定(bind)限制

javascript - TypeScript 中 React.Component 的继承

javascript - 如何使用adobe dtm实现sizemek转换标签?