JS 事件委托
1 当有大量元素需要注册事件的时候可以用事件委托实现
测试代码
function init() {
var d = document.getElementById("test");
d.appendChild(createUl());
console.profile("f1");
f1();
console.profileEnd("f1");
console.profile("f2");
f2(d);
console.profileEnd("f2");
}
//普通方式注册事件
function f1() {
var ul = document.getElementById("testUl");
for (var i = 0; i < ul.childNodes.length; i++) {
ul.childNodes[i].onclick = click;
}
}
//事件委托
function f2(d) {
d.onclick = function(e) {
var e = e || window.event;
var target = e.srcElement || e.target;
if (target.tagName == "LI") {
alert(target.innerHTML);
}
}
}
function click() {
alert("1");
}
function createUl() {
var ul = document.createElement("UL");
ul.id = "testUl";
var lis = "";
for (var i = 0; i < 200; i++) {
lis += "<li>" + i + "</li>";
}
ul.innerHTML = lis;
return ul;
}
测试结果:使用事件委托方式性能要高的多

浙公网安备 33010602011771号