我正在做一个待办事项列表作为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>
以前,button元素是一个输入类型,使用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 = "";
}
为什么单击按钮w/ id=“newitem”时没有任何React?
3条答案
按热度按时间ngynwnxp1#
在附加函数时,首先执行该函数,然后将返回值
undefined
附加到事件。删除括号:当你把
addTodo()
作为一个参数时,你并不是在传递函数本身,它做的第一件事是执行函数,并把返回值作为参数。因为没有
return
语句的函数会隐式生成undefined
,所以原始代码实际上是在运行该函数,然后附加以下语句:a5g8bdjr2#
对于那些仍然有这个错误的人,我的情况是菜单有
li > a
当我将
click
事件绑定到a
时,它不工作,我通过从li
侦听click
事件并使用e.preventDefault()
来修复它现在可以用了
jyztefdp3#
不要使用两个
DOMContentLoaded
侦听器,尝试使用一个侦听器。更改此项:
对此: