我正在努力将待办事项列表作为 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/