【问题标题】:How to use new-bind with addeventListeners in ES6 - Javascript?如何在 ES6 - Javascript 中使用 new-bind 和 addeventListeners?
【发布时间】:2019-07-26 18:32:53
【问题描述】:

我正在尝试将 addEventlistener 添加到具有#addButton id 的 DOM 元素中。我在 ES6 中使用了新的绑定方法,但这不起作用。如何调用添加函数?

class ToDoApp {
constructor (settings) {
    if (!settings) {
        throw 'Todo App requires settings object';
    }
    this.addButtonHandler = document.querySelector(settings.addButtonSelector);
    this.addButtonHandler.addEventListener('click', this.add);

}
add = () => {
    console.log('heello');
 }
}

 const myTodo = new ToDoApp({
inputSelector: '#input',
addButtonSelector: '#addButton',
deleteButtonSelector: '#delete',
listContainerSelector: '#list'
});

HTML

<div id="container">
    <div id="imputArea">
        <form action="index.html" method="POST">
            <input type="text" id="input" />
            <input type="button" id="addButton" value="Add" />
        </form>
    </div>
    <div id="listArea">
        <ul id="list">
            <li>
                <input type="checkbox" />
                <p id="task">Task 1</p>
                <input type="button" id="delete" value="X" />
            </li>
        </ul>
    </div>
 </div>

【问题讨论】:

  • 如果在创建newTodo 时按钮存在,则可以正常工作。 “不起作用”是什么意思...任何错误?
  • "ES6 中的新绑定方法" - 你在说什么?
  • "但这不起作用" - 究竟是什么不起作用?当您运行此代码时,您的 DOM 看起来如何(html 标记)?您是否收到任何错误消息?

标签: javascript ecmascript-6 eventhandler


【解决方案1】:

我猜你得到这个错误是因为当你创建一个 newTodo 实例时元素不存在。您可能希望对尝试添加事件侦听器的按钮进行空检查。

class ToDoApp {
    constructor(settings) {
        if (!settings) {
            throw 'Todo App requires settings object';
        }
        this.addButtonHandler = document.querySelector(settings.addButtonSelector);
        if (this.addButtonHandler) {
            this.addButtonHandler.addEventListener('click', this.add);
        } else {
            throw "Element you want to add event listener to doesn't exist";
        }

    }
    add = () => {
        console.log('heello');
    }
}

const myTodo = new ToDoApp({
    inputSelector: '#input',
    addButtonSelector: '#addButton',
    deleteButtonSelector: '#delete',
    listContainerSelector: '#list'
});

【讨论】:

  • 我收到“语法错误:当前不支持字段”。还有我的HTML代码如下;
  • @SemihÖzden 那是因为add = () =&gt; { 语法错误。相反,将this.add = () =&gt; { 放入您的构造函数中。
  • 我已经解决了这个问题。当我用谷歌浏览器打开项目时,它运行良好,但在 Firefox 中它不起作用。它给出了语法错误。
  • @SemihÖzden 这是因为 public class fields syntax javascript 在 Firefox 中尚不支持。您可以在此处查看状态:chromestatus.com/feature/6001727933251584。如果您想在所有浏览器中运行此代码,我建议您使用 bable 进行转译。
  • 非常感谢@KaranVerma
猜你喜欢
  • 1970-01-01
  • 2016-03-07
  • 1970-01-01
  • 1970-01-01
  • 2018-03-28
  • 2019-10-02
  • 1970-01-01
  • 1970-01-01
  • 2017-11-17
相关资源
最近更新 更多