javascript addEventlistener "click"不工作

标签 javascript html dom google-chrome-extension indexeddb

我正在努力将待办事项列表作为 Chrome 新标签扩展。

我的 html 文件:

<head>
</head>

<body>
    <h2 id="toc-final">To Do List</h2>
    <ul id="todoItems"></ul>
    <input type="text" id="todo" name="todo" placeholder="What do you need to do?" style="width: 200px;">
    <button id="newitem" value="Add Todo Item">Add</button>

    <script type="text/javascript" src="indexdb.js"></script>
</body>
</html>

以前,按钮元素是带有 onClick() 的输入类型,但 Chrome 不允许这样做。所以我不得不制作一个 javascript 函数,当它被点击时会触发。在我的 indexdb.js 中:

var woosToDo = {};
    window.indexedDB = window.indexedDB || window.webkitIndexedDB ||
                    window.mozIndexedDB;

    woosToDo.indexedDB = {};
    woosToDo.indexedDB.db = null;

    window.addEventListener("DOMContentLoaded", init, false);

    window.addEventListener('DOMContentLoaded', function () {
      document.getElementById("newitem").addEventListener("click", addTodo(), false);
    });

...
...

    function addTodo() {
      var todo = document.getElementById("todo");
      woosToDo.indexedDB.addTodo(todo.value);
      todo.value = "";
    }

为什么当我点击带有 id="newitem"的按钮时没有任何反应?

最佳答案

附加函数时,您首先执行它,然后将返回值 undefined 附加到事件。去掉括号:

.addEventListener("click", addTodo, false);

当您将 addTodo() 作为参数时,您并没有传递函数本身。它做的第一件事是执行函数并使用返回值作为参数。

由于没有return 语句的函数隐含地导致undefined,原始代码实际上是在运行该函数,然后附上:

.addEventListener("click", undefined, false);

关于javascript addEventlistener "click"不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33906015/

相关文章:

html - 使用 Bootstrap 设计网站

javascript - 克隆一个 div 并替换子元素

javascript - 有没有办法使用 JavaScript 引入 Internet Explorer 条件注释?

javascript - 如果我的 mouseenter 函数已经执行,如何使其不执行?

javascript - 动态创建 div 元素(jQuery 移动页面)

javascript - 清理 Javascript/Nodejs 代码

javascript - 我们可以向用户控件 (.ascx) 发出 ajax 请求吗?

html - 使用 CSS 将多个 div 与 CanvasJS 图表并排设置

javascript - Arbor.JS 中的单节点错误

JavaScript 对象字面量语法