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;
        }

 测试结果:使用事件委托方式性能要高的多

 


posted @ 2011-12-07 11:59  忧忧夏天  阅读(5979)  评论(1编辑  收藏  举报