将函数的逻辑应用于最初不在HTML脚本中的新创建的HTML

如何解决将函数的逻辑应用于最初不在HTML脚本中的新创建的HTML

我已经为跟踪日常任务的小型应用程序编写了一些代码。我正在使用id = 'active'克隆节点,该节点具有将其传输到另一列的按钮。用于执行此操作的逻辑不适用于从createNewButton1创建的新克隆节点。

<!DOCTYPE html>
<html lang="en">
  <head>
    <Meta charset="UTF-8" />
    <Meta name="viewport" content="width=device-width,initial-scale=1.0" />
    <Meta http-equiv="X-UA-Compatible" content="ie=edge" />
    <title>Project Board</title>
    <link rel="stylesheet" href="assets/styles/app.css" />
    <script src="assets/scripts/app.js" defer></script>
  </head>
  <body>
  
    <header id="main-header">
      <h1>Project Planner</h1>
    </header>

  <div>
    <section id="active">
      <header>
        <h2>Days</h2>
      </header>
      <ul>
        <li
          id="p4"
          data-extra-info="Super important conference! Fictional but still!"
          class="card"
        >
          <h2>Monday</h2>
        </li>
    </ul>
 </section>
Class ProjectItem {
  constructor(id,updateProjectListsFunction,type) {
    this.id = id;
    this.updateProjectListsHandler = updateProjectListsFunction;
    this.connectMoreInfoButton();
    this.connectSwitchButton(type);
    this.createNewButton1();
  }

  createNew () {
    const newItem = document.getElementById('active').querySelector('li');
    const cln = newItem.cloneNode(true);
    document.getElementById('active').appendChild(cln);
  }


createNewButton1 () {

  const addNewButton = document.getElementById('addButton');
    addNewButton.addEventListener( 'click',this.createNew);
}

导致切换到另一列的按钮使用事件侦听器,这不适用于新克隆的节点。

connectSwitchButton(type) {
    const projectItemElement = document.getElementById(this.id);
    let switchBtn = projectItemElement.querySelector('button:last-of-type');
    switchBtn = DOMHelper.clearEventListeners(switchBtn);
   
    switchBtn.textContent = type === 'active' ? 'Finish' : 'Activate';
    switchBtn.addEventListener(
      'click',this.updateProjectListsHandler.bind(null,this.id)
    );
  }

解决方法

您需要创建一个click事件处理程序,该事件处理程序将调用moveElement。您还需要注意ID,以避免重复:

  createNew () {
    const newItem = document.getElementById('active').querySelector('li');
    const cln = newItem.cloneNode(true);
    cln.id = "p" + (document.querySelectorAll("#active > li").length + 1);
    document.getElementById('active').appendChild(cln);
    cln.addEventListener("click",function() {DOMHelper.moveElement(cln.id,"#finished-projects ul")});
  }

在这里测试:https://jsfiddle.net/gcL6e3kz/

观察:这与您所询问的问题无关,但是如果我在所有卡上单击“完成”,然后单击“添加新”,则它将失败,因为没有要克隆的内容。为此,最好通过模板文字创建一些模板,然后可以使用它们而不必假设至少有一张卡片。编码愉快!

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?