首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将单击函数添加到动态创建的div

将单击函数添加到动态创建的div
EN

Stack Overflow用户
提问于 2018-11-21 23:27:36
回答 2查看 2.7K关注 0票数 1

从我的代码中,我有一个函数可以多次创建div元素(使用surroundContents()),如何使这些已创建的div元素在同一个页面的类中触发一个函数?

更准确地说,我需要这些div元素中的任何一个(使用函数createDiv()创建)能够通过单击位于MyPage class中的名为clickCreatedDiv(arg)的函数触发并传递任何字符串作为参数。我试过这个element.setAttribute('(click)', 'clickCreatedDiv()');,但没有成功。我怎样才能达到这种行为呢?

代码语言:javascript
复制
export class MyProvider {
  wrapSelection(comment) {
    let element = document.createElement("div")
    element.setAttribute('(click)', 'clickCreatedDiv()');
    element.surroundContents(element);
  }
}

import { MyProvider } from '../../providers/my-provider';
@Component({
    selector: 'page-mypage',
    templateUrl: 'mypage.html',
}) 
export class MyPage {
  constructor(public myprovider: MyProvider) {}
  createDiv() {
    this.myprovider.wrapSelection();
  }

  clickCreatedDiv(arg) { // This is what I want to trigger with click
    alert('click ' + arg);
  }
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-11-22 02:42:07

角事件绑定语法(click)="doSomething()"不能用于在动态创建的HTML上设置事件处理程序。要使其工作,可以从MyPage类传递事件处理程序,并使用element.addEventListener设置它。

代码语言:javascript
复制
export class MyProvider {
  wrapSelection(eventHandler) {
    let element = document.createElement("div")
    element.addEventListener("click", () => { eventHandler("Some text"); });
    ...
  }
}

MyPage中,事件处理程序应该定义为一个箭头函数,以保留this并允许访问类成员:

代码语言:javascript
复制
createDiv() {
  this.myProvider.wrapSelection(this.clickCreatedDiv);
}

clickCreatedDiv = (arg) => {
  alert('Clicked: ' + arg);
}

有关演示,请参见这一堆闪电战

票数 1
EN

Stack Overflow用户

发布于 2018-11-22 01:01:22

我将把click函数作为回调传递给wrapSelection。例如,类似:

代码语言:javascript
复制
export class MyProvider {
  wrapSelection(comment, onClick) {
    let element = document.createElement("div")
    element.setAttribute('(click)', onClick);
    element.surroundContents(element);
  }
}

export class MyPage {
  constructor(public myprovider: MyProvider) {}
  createDiv() {
    this.myprovider.wrapSelection('Some comment', this.clickCreatedDiv);
  }

  clickCreatedDiv(arg) { // This is what I want to trigger with click
    alert('click ' + arg);
  }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53421868

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档