我正在创造' li'元素动态地通过循环,我在向动态生成的每个元素分配事件时遇到问题。我想在生成的每个li元素上分配事件onclick。
以下是代码:
var not = [{
"event": "It's your friend's Birthday. Wish him luck!!!",
"view": "unread",
"status": "read",
"image": "<img src='cake.jpg' style='height:80px';'width:80px'>"
}]
var ids = ["id1", "id2", "id3", "id4", "id5"];
var lis = new Array(10);
var i = 0;
for (i; i < not.length; i++) {
lis[i] = document.createElement("li");
var obj = document.createTextNode(not[i].event);
lis[i].appendChild(obj);
document.body.appendChild(lis[i]);
lis[i].setAttribute('id', ids[i]);
var x = document.getElementById(ids[i]);
x.addEventListener("click", func('ids[i]'));
document.body.appendChild(ids[i]);
}
function func(a) {
document.getElementById(a).innerHTML = "hello";
}
同样还有5个不是对象。
答案 0 :(得分:1)
尝试替换
x.addEventListener("click", func());
通过
x.addEventListener("click", func);
如果使用func()
,则调用该函数并发送func()
的返回值,而不是传递函数本身。
答案 1 :(得分:0)
尝试使用.bind
将值绑定到事件侦听器。当你这样做
x.addEventListener("click", func('ids[i])');
func
的返回值。'ids[i]'
不是变量。它是一个字符串。将以下内容替换为:
x.addEventListener("click", func.bind(ids[i]));