javascript addEventlistener "click" 不工作
javascript addEventlistener "click" not working
我正在制作一个待办事项列表作为 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" 的按钮时没有任何反应?
附加函数时,您首先执行它,然后将 return 值 undefined
附加到事件。删除括号:
.addEventListener("click", addTodo, false);
当您将 addTodo()
作为参数时,您并没有传递函数本身。它做的第一件事是执行函数并使用 return 值作为参数。
由于没有 return
语句的函数隐含地导致 undefined
,原始代码实际上是 运行 函数,然后附上:
.addEventListener("click", undefined, false);
尝试一个而不是两个 DOMContentLoaded
听众。
改变这个:
window.addEventListener("DOMContentLoaded", init, false);
window.addEventListener('DOMContentLoaded', function () {
document.getElementById("newitem").addEventListener("click", addTodo(), false);
});
为此:
window.addEventListener('DOMContentLoaded', function () {
init();
document.getElementById("newitem").addEventListener("click", addTodo, false);
});
对于仍然遇到这个错误的人,我的情况是菜单有 li > a
<li> <a class="menu-item">Menu item</a></li>
当我将 click
事件绑定到 a
时,它不起作用
我通过从 li
监听 click
事件并使用 e.preventDefault()
来修复它
现在有效
我正在制作一个待办事项列表作为 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" 的按钮时没有任何反应?
附加函数时,您首先执行它,然后将 return 值 undefined
附加到事件。删除括号:
.addEventListener("click", addTodo, false);
当您将 addTodo()
作为参数时,您并没有传递函数本身。它做的第一件事是执行函数并使用 return 值作为参数。
由于没有 return
语句的函数隐含地导致 undefined
,原始代码实际上是 运行 函数,然后附上:
.addEventListener("click", undefined, false);
尝试一个而不是两个 DOMContentLoaded
听众。
改变这个:
window.addEventListener("DOMContentLoaded", init, false);
window.addEventListener('DOMContentLoaded', function () {
document.getElementById("newitem").addEventListener("click", addTodo(), false);
});
为此:
window.addEventListener('DOMContentLoaded', function () {
init();
document.getElementById("newitem").addEventListener("click", addTodo, false);
});
对于仍然遇到这个错误的人,我的情况是菜单有 li > a
<li> <a class="menu-item">Menu item</a></li>
当我将 click
事件绑定到 a
时,它不起作用
我通过从 li
监听 click
事件并使用 e.preventDefault()
现在有效