如何将事件添加到仅在javascript中动态生成的每个元素

时间:2016-01-05 10:31:24

标签: javascript html css

我正在创造' 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个不是对象。

2 个答案:

答案 0 :(得分:1)

尝试替换

x.addEventListener("click", func());

通过

x.addEventListener("click", func);

如果使用func(),则调用该函数并发送func()的返回值,而不是传递函数本身。

答案 1 :(得分:0)

尝试使用.bind将值绑定到事件侦听器。当你这样做

x.addEventListener("click", func('ids[i])');
  1. 您正在为事件监听器分配func的返回值。
  2. 'ids[i]'不是变量。它是一个字符串。
  3. 将以下内容替换为:

    x.addEventListener("click", func.bind(ids[i]));