2015-11-24 54 views
4

我正在制作待办事项列表作为Chrome新标签页扩展程序。javascript addEventlistener“点击”不起作用

我的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()的输入的类型,但铬不允许。所以我不得不做一个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”时什么也没有发生?

回答

5

附加该功能时,首先执行它,并将返回值undefined附加到事件。删除括号:

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

编辑:解释。

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

由于没有return声明功能隐含导致undefined,原代码是实际运行的功能,然后附加此:

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

它仍然无法正常工作 –

+1

难道你在控制台的任何错误,你可以在'addTodo'顶部日志的消息?没有什么人可以做“不行”。 – TbWill4321

+0

'addEventListener'中的'addTodo()'将展开为'function(){addTodo(); }' – Ramanlfc

-1

而不是两个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); 
});