在JS中创建元素时内联添加事件侦听器是不好的做法吗?

尤尔杜

我正在使用JS类动态创建和呈现div标签,如下所示:

class CreateNote {
  constructor(title, body) {
    this.title = title;
    this.body = body;
    this.render = () => {

      // Create div 1 & 2 and give them the same class name

      const div1 = document.createElement('div');
      div1.className = 'notes-inner-container';

      const div2 = document.createElement('div');
      div2.className = 'notes-prev';

      const hr = document.createElement('hr');
      hr.className = 'notes__line';

      // Nest 'div2' inside 'div1'

      div1.appendChild(div2);
      div1.appendChild(hr);

      /*
        Create Paragraph 1 & 2 and give them the same
        class name and some text
      */

      const p1 = document.createElement('p');
      p1.innerText = this.title;

      const p2 = document.createElement('p');
      p2.className = 'notes-prev__body';
      p2.innerText = this.body;

      // Nest p 1 & 2 inside 'div2'

      div2.appendChild(p1);
      div2.appendChild(p2);

      // Get the body tag and append everything

      const notesDiv = document.querySelector('.notes');
      notesDiv.appendChild(div1);
    }
  }
}

我需要向该div添加一个事件监听器。但是由于此div实际需要花费一些时间才能呈现,因此当我尝试将侦听器附加到该div时,它会不断返回null值。我发现这个问题的解决方法是,如果我添加事件监听器里面我的渲染方法,就像这样:

// Previous chunk of code
const div1 = document.createElement('div');

div1.className = 'notes-inner-container';

div1.addEventListener('click', () => {
  // Do something;
}

// Next chunk of code

然后我想知道,这是不好的做法吗?如果是这样,您会采用哪种方式?如果您需要更多信息,请让我知道并提前致谢。

艾萨克·科布雷

不,这很标准。我将单独定义事件侦听器,然后将其传入:

// at class level

const handleClick = event => { /* handle onClick event */ }

// inside render method

const div = document.createElement('div')

div.className = 'notes-inner-container'
div.addEventListener('click', handleClick)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

JavaScript类,添加这样的事件侦听器是一种不好的做法吗?

在动态创建的元素上添加事件侦听器

JS事件侦听器,用于动态添加元素

将事件侦听器添加到动态创建的元素中

添加事件侦听器在动态 (*ngFor) 创建的元素中不起作用

将事件侦听器添加到js中的多个选择元素

将业务逻辑放入侦听器/执行器类中是一种不好的做法吗?

使用添加事件侦听器创建滚动事件 - Javascript

如何向使用 ES6 模板文字创建的元素添加函数/事件侦听器?

如何将事件侦听器添加到动态创建的HTML列表元素?

Dojo-将事件侦听器添加到动态创建的元素

如何向原型内动态创建的元素添加事件侦听器?

jQuery面向对象的创建dom元素并添加事件侦听器

如何为我们通过 javascript 创建的元素添加事件侦听器?

使用jQuery将事件侦听器添加到动态添加的元素中

Javascript-添加事件侦听器时未定义的数组元素

在元素不是iset javascript时添加事件侦听器单击

在尝试创建事件侦听器读取的元素时,控制台抛出未定义

向推入数组的 DOM 元素添加事件侦听器

JS-为与querySelectorAll匹配的所有元素添加单击事件侦听器

如何在Polymer中的自定义元素属性中添加事件侦听器?

如何创建检查div元素样式的事件侦听器?

为新创建的按钮添加事件侦听器

有什么方法可以访问在函数中添加了事件侦听器的元素?

在打字稿中为亮元素组件添加事件侦听器

将事件侦听器添加到Angular 4中的DOM元素

将事件侦听器添加到香草javascript中尚不存在的元素

将事件侦听器添加到从template标签克隆的元素中

如何将事件侦听器添加到数组中的每个元素?