【发布时间】:2017-08-05 18:57:05
【问题描述】:
我以前也遇到过这个问题,基本上我想将我的应用程序的所有内容分开,即缓存 dom、绑定事件、javascript 中没有 html 等。
我有一个问题,在我的 bindevents 方法中,我点击了删除按钮,但删除按钮仅在添加了待办事项后才存在。
我遇到了一个错误:
未捕获的类型错误:无法读取 null 的属性“addEventListener”
因为我想我在 dom 中搜索一个不存在的元素,我如何保持结构不变,但只在添加项目后在 DOM 中搜索删除按钮?
JS
(function() {
var toDo = {
data: [],
cacheDom: function() {
this.toDoApp = document.getElementById('to-do-app');
this.toDoTemplate = document.getElementById('to-do-template');
this.addToDo = document.getElementById('add-to-do');
this.addToDoValue = document.getElementById('add-to-do-value');
this.deleteToDo = document.querySelector('.to-do-delete');
},
load: function() {
this.toDoTemplate = Handlebars.compile(this.toDoTemplate.innerHTML);
},
render: function() {
this.toDoApp.innerHTML = this.toDoTemplate(this.data);
},
bindEvents: function() {
this.addToDo.addEventListener("click", this.add.bind(this));
this.deleteToDo.addEventListener("click", this.delete.bind(this));
},
add: function(e) {
var toDoValue = this.addToDoValue.value;
if(toDoValue) {
var toDoObj = {
value: toDoValue,
id: Date.now()
}
this.data.push(toDoObj);
}
this.render();
},
delete: function() {
console.log("delete!");
},
init: function() {
this.cacheDom();
this.bindEvents();
this.load();
this.render();
}
}
toDo.init();
})();
【问题讨论】:
-
你可以把按钮放进去,然后把它隐藏起来。
标签: javascript