[英]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 function ,它會在點擊時觸發。 在我的 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);
對於仍然遇到這個錯誤的人,我的情況是菜單有li > a
<li> <a class="menu-item">Menu item</a></li>
當我將click
事件綁定到a
時,它不起作用我通過從li
監聽click
事件並使用e.preventDefault()
來修復它
現在可以用了
嘗試使用一個,而不是兩個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);
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.