有一个需求是这样的:
父元素div绑定一个mousedown事件,子元素a绑定一个click事件。
看解构:
<div id="nav"><a href="javascript:void(0);">点我</a></div>
搜了很多相关的都没有解决办法,于是我想到了事件委托,在父元素被mousedown的时候,event对象里包含了很多有用的东西。其中target就是关键!
代码:
//原生js走起
const nav = document.querySelector('#nav');const a = nav.querySelector('a');a.addEventListener("click",function(e){alert("a被点了");//e.stopPropagation();});nav.addEventListener("mousedown",function(e){(e.target.tagName).toLowerCase() === 'a' ? a.click :alert('你点击的是父元素'); });
这样,只要判断到我们点击到区域有a标签,说明我点击到了它,然后模拟触发一次click,就完成了我的需求了。