for(let i = 0; i <= todosToday.length - 1; i++) {
const a = document.createElement("a");
a.addEventListener("click", function() {
showFoundTodo(todosToday[i]);
});
}
这适用于Chrome,但不适用于IE,特别是IE11。当我在todosToday
事件中附加函数i
时,showFoundTodo
上的数组click
的实例无法通过。
function showFoundTodo(todo) {
console.log(todo);
}
此函数打印出undefined
,从而使参数无法使用。在Chrome上,它会毫无问题地输出到对象。
我检查过,只有在那个例子中todosToday
变得不可读。要知道更改发生的位置,我在其他任何地方执行console.log()
并打印出对象(在for
循环之前,之内和之后)。起初我认为它是attachEvent
兼容性,但是对于早期版本的IE而言,该函数也被调用。非常感谢任何帮助。
答案 0 :(得分:1)
在侦听器触发时,循环变量i
不在范围内。修复它的简单方法是将其移动到外部范围:
var i;
for(i = 0; i <= todosToday.length - 1; i++) {
我直接修改DOM时通常喜欢的方法是将对象引用添加到元素中。
var todosToday = [ 'Wake up.', 'Kiss my wife.', 'Take a shower.' ];
for(var i = 0; i <= todosToday.length - 1; i++) {
var a = document.createElement("a");
a.innerText = todosToday[i];
a.todo = todosToday[i];
a.addEventListener("click", function() {
showFoundTodo(this.todo);
});
var div = document.createElement('div')
div.appendChild(a);
document.body.appendChild(div);
}
function showFoundTodo(todo) {
console.log(todo);
}
注意:您在所有IE版本中都遇到问题,BTW。 IE 9之前不支持addEventListener
,IE 11之前不支持let
和const
。