js委托事件-addEventListeners(冒泡方向)

JQuery中live()、delegate()、on()事件都能给新增元素绑定事件,原理就是用了事件委托。

实例:

给id为div的元素绑定一个click委托,如果冒泡上来的元素是P元素就会执行alert("xxx");

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<div id="div">
   <p>11111</p>
    <p>2222</p>
</div>
<button id="btn">xxxx</button>
<script>
    document.getElementById("div").addEventListener("click",function(e){
        if(e.target.nodeName=="P"){
            alert("xxx")
        }
    })
    document.getElementById("btn").οnclick=function(){
        var p = document.createElement("p");
        p.innerHTML="333";
        document.getElementById("xx").appendChild(p);
    }
</script>
</body>
</html>

冒泡方式分为2种,一种是由子元素向上冒泡,一种是由父元素向下冒泡

在使用addEventListeners的时候有第三个参数true和flase;默认是flase,由子元素向上冒泡

当我们设置为true的时候就会由父元素向下冒泡

实例:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<div id="id1" style="width:200px; height:200px; position:absolute; top:100px; left:100px; background-color:blue; z-index:4">
    <div id="id2" style="width:100px; height:100px; top:20px; left:70px; background-color:green; "></div>
</div>
<script>
    document.getElementById("id1").addEventListener('click',function(){
        console.log("id1");
    },true)
    document.getElementById("id2").addEventListener('click',function(){
        console.log("id2");
    },true)
</script>
</body>
</html>



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
事件委托事件冒泡结合在面试中可能会被问到。事件委托是一种常用的绑定事件的技巧,它的原理是利用事件冒泡事件冒泡是指当一个元素上的事件触发时,它会逐级向上冒泡到它的父元素,直至冒泡到文档的根节点。这种机制可以让我们利用事件委托来处理大量的DOM元素上的事件。 举个例子来说明事件委托的原理,假设我们有一个最外层的div,里面包含了多个ul元素,而每个ul元素里面又包含了多个li元素和a元素。如果我们给最外层的div添加点击事件,那么当我们点击任意一个li元素或a元素时,事件冒泡到最外层的div上,从而触发最外层div的点击事件。这样,我们就可以利用最外层div的点击事件来处理所有li元素和a元素的点击事件,而不需要给每个li元素和a元素分别绑定点击事件。 所以,事件委托的好处是可以减少事件处理程序的数量,提高代码的性能。通过将事件绑定在父元素上,可以节省内存,减少事件监听的绑定次数,同时也可以动态地添加或删除子元素,而不需要重新绑定事件。 总结一下,事件委托是一种利用事件冒泡原理的技巧,通过将事件绑定在父元素上,可以处理大量子元素上的事件,避免给每个子元素分别绑定事件处理程序。这样可以提高代码的性能,并且方便动态添加或删除子元素。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [什么是事件冒泡事件委托?如何实现事件委托?](https://blog.csdn.net/qq_38290251/article/details/88026540)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [面试题:什么是事件委托? 怎么阻止默认动作? 怎么阻止事件冒泡?](https://blog.csdn.net/baidulixueqin/article/details/117098286)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值