0

有一堆的动态元素,我是应该在页面js初始化时用类似

$(document).on("click","xxxx",function(){...})

这种形式进行统一注册还是应该在元素添加时用

$("xxxx").on("click",function(){...})

这种方式进行单独注册呢
这个是否需要根据元素的实际使用情况来进行不同的区分呢,如果元素添加删除的频率很高那是否第一种方式效率较高?

4个回答

0

这种情况你应该用live
$("#xxxx").live("click", function(e) {

console.log(e.target.innerHTML);

});

0

使用事件委托,给父级绑定事件,使用this

0

原生js事件委托

<div id="box">
        <a href="javascript:;" id="btn">添加</a>
        <ul>
            <li>list-1</li>
            <li>list-2</li>
            <li>list-3</li>
        </ul>
    </div>
    <script>
        var oBox = document.getElementById("box"),
            oBtn = document.getElementById("btn"),
            oUl = oBox.querySelector("ul"),
              aLi = oUl.querySelectorAll("li"),
            num = aLi.length;

        oBox.onclick = function (e) {
            e = e || window.event;
            var tag = e.target || e.srcElement;
            if(tag.nodeName.toLocaleLowerCase()=="li"){
                console.log(tag.innerHTML);
            }
        };
        
        oBtn.onclick = function () {
            num++;
            var oLi = document.createElement("li");
            oLi.innerHTML = "list-"+(num);
            oUl.appendChild(oLi);
        };
    </script>
0

一般是加载之后,因为加载之前已经绑定的事件绑定不到加载之后的。

撰写答案