【JavascriptDay17】事件传播、事件对象
- 互联网
- 2025-09-05 09:51:01

事件传播 <div style="background-color: rgba(0, 0, 255, 0.5);"> <div style="background-color: rgba(255, 0, 0, 0.5);margin: 50px;">asdasd</div> </div> <!-- 事件传播,子元素被触发的事件,会基于标签结构向父元素传递, 并让父元素也触发对应的事件 --> <div class="box" onclick="fun1()"> <div class="box"> <div class="box"> <div class="box" onclick="fun2()"></div> </div> </div> </div> <script> function fun1(){ console.log(1); } function fun2(){ console.log(2); } </script> <hr> <!-- 事件传播过程中的事件回调执行分为两种执行 1. 冒泡:由子元素向父元素顺序,依次触发事件 默认事件回调的执行规则,元素的属性事件绑定只会触发冒泡规则 2. 捕获:由父元素向子元素顺序,依次触发事件 元素只有通过 addEventListener("事件名",回调方法,true); 捕获绑定 --> <div class="box" onclick="printName('div1')">div1 <div class="box" onclick="printName('div2')">div2 <div class="box" onclick="printName('div3')">div3 <div class="box" onclick="printName('div4')">div4</div> </div> </div> </div> <script> function printName(arg){ console.log(arg); } </script> <hr> <div class="box a">div1 <div class="box a">div2 <div class="box a">div3 <div class="box a">div4</div> </div> </div> </div> <script> var boxAList = document.querySelectorAll(".a"); for (let i = 0; i < boxAList.length; i++) { boxAList[i].addEventListener("click",function(){ console.log("div"+(i+1)); },true) } </script> <hr> <!-- 当父子元素事件绑定时,同时存在捕获和冒泡。优先执行捕获 --> <div class="box b">div0-捕获 <div class="box b">div1-冒泡 <div class="box b">div2-捕获 <div class="box b">div3-冒泡</div> </div> </div> </div> <script> var boxAList = document.querySelectorAll(".b"); for (let i = 0; i < boxAList.length; i++) { boxAList[i].addEventListener("click",function(){ console.log("div"+i); },i%2==0); // i%2==0 true 捕获 // i%2==0 false 冒泡 } </script> 事件对象 <!-- 事件对象参数:记录事件触发时对应的相关信息 + 标签属性方式完成事件绑定时,可以为方法提供一个全局关键字 event event关键字用于指代当前方法触发时(瞬时参数)的相关信息对象 --> <!-- abc 是JS的全局变量,如果abc不存在,会报 abc is not defined --> <input type="button" value="点击(左键按下并松开)" onclick="printEventA('参数',abc,event)"> <input type="button" value="鼠标左键单击" onmousedown="printEventA('参数',abc,event)"> <script> var abc = "全局变量"; function printEventA(arg,arg1,e){ console.log("click",arg,arg1); console.log("事件对象:",e); console.log("事件类型:",e.type ); console.log("事件触发对象:",e.target ); console.log("事件的绑定对象:",e.currentTarget); console.log("鼠标事件对应指针坐标",e.x,e.y); } </script> <hr> <div class="box" onclick="printEventB(event,'outDiv')"> <!-- <div class="box" onclick="printEventB(event,'inDiv')"></div> --> <div class="box"></div> </div> <script> function printEventB(e,name){ // console.log(name,"==========>"); // console.log("target",e.target); // console.log("currentTarget",e.currentTarget); // console.log("<===========",name); console.log(name); // 只有元素自身被点击时才会触发下述功能的调用 => 绑定的事件功能只有元素自己可以触发 if( e.target===e.currentTarget ){ console.log(name,"==========>"); console.log("target",e.target); console.log("currentTarget",e.currentTarget); console.log("<===========",name); } } </script>
【JavascriptDay17】事件传播、事件对象由讯客互联互联网栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“【JavascriptDay17】事件传播、事件对象”
上一篇
AI百炼成神:线性回归,预测房价