js事件
一、事件绑定:
onclick方式:
1 /** 2 * 在js中如果我们在写的事件的时候通过onclick方式的时候同一个元素在绑定相同的事件的时候,后注册的时间会被前一个事件覆盖。 3 * 如果通过addEventListener注册事件的时候,不会发生覆盖情况。 4 */ 5 var test=document.querySelector(".test"); 6 test.onclick=function(){ 7 alert(1) 8 }; 9 test.onclick=function () { 10 alert(2) 11 }
addEventListener:
1 test.addEventListener("click",function () { 2 console.log(1); 3 }); 4 test.addEventListener('click',function () { 5 console.log(2); 6 })
二、事件流。
js中事件流分两种:
- 冒泡事件:当子元素的事件被执行,他的父元素相同事件也依次执行。有子元素事件依次执行父元素的相同的事件。
- 捕获事件:当触发子元素的事件的时候,先执行其父元素的相同的事件,由大到小依次执行相同的事件。最后执行的是子元素。
1 /** 2 * 3 * @type {HTMLBodyElement}addEventListener(事件类型名称,触发事件执行的函数,boolean/{}) 4 * 当我们第三个参数传递的是boolean的时候,表示该事件是在捕获阶段执行(true)还是捕获阶段执行(false) 5 */ 6 var body=document.querySelector('body'); 7 body.addEventListener('click',function(){ 8 console.log("body") 9 },true); 10 test.addEventListener('click',function(){ 11 console.log('test') 12 },true)
1 /** 2 * addEventListener 第三参数传递对象的时候:capture:boolean true表示在捕获阶段执行 false是非捕获阶段执行 3 */ 4 body.addEventListener('click',function(){ 5 console.log('body') 6 },{capture:true}); 7 test.addEventListener('click',function(){ 8 console.log('test') 9 },{capture:true});
默认情况下:js在执行事件的时候,是非捕获阶段执行即冒泡。
默认事件:就是浏览器给元素提供的默认事件或者默认行为。比如a标签的点击跳转,button标签在form表单里进行提交等等。
1 /** 2 * 阻止默认事件: 使用事件提供的函数:event.preventDefault()来阻止浏览器提供的默认事件。 3 */ 4 var a=document.querySelector('a'); 5 a.addEventListener('click',function(e){ 6 e.preventDefault(); 7 alert(22); 8 }); 9 /** 10 * addEventListener: 第三个参数可以传递once:boolean 表示改事件是否执行一次. 11 */ 12 test.addEventListener('click',function(){ 13 alert('test') 14 },{once:true});
1 /** 2 * addEvenetListener 第三个参数传递{passive:boolean}表示我们是否阻止默认时间发生 true:表示无法阻止默认事件发生,false表示可以阻止默认事件发生。 3 */ 4 a.addEventListener('click',function(event){ 5 event.preventDefault(); 6 alert(2) 7 },{passive:true})
- 取消事件绑定 removeEventListenter 需要注意的是绑定的函数是显示声明不能是匿名函数
1 <script> 2 /*** 3 * 移除事件:removeEventListener(type,function) 4 * 需要注意的是function是显示命名的函数. 5 */ 6 var _div=document.querySelector('div'); 7 var button=document.querySelector('button'); 8 function clikFunc(){ 9 alert(22) 10 } 11 _div.addEventListener('click',clikFunc); 12 button.addEventListener('click',function () { 13 _div.removeEventListener('click',clikFunc); 14 }) 15 16 </script>
- 事件目标:表示触发改事件的元素。event.target:触发时间的元素。
- 事件绑定元素:event.currentTaget 事件绑定的元素。
1 <script> 2 /** 3 * 我们在绑定时间函数的时候,默认传进的形参事件对象event,该对象其中有event.target 4 * event.target:表示触发事件的目标元素 5 * 如下事例 由于冒泡的问题,在点击p标签的时候,会触发冒泡。此时event.target输出的p标签。 6 * div点击输出的div标签。 7 */ 8 var div=document.querySelector('div'); 9 var p=document.querySelector('p'); 10 div.addEventListener('click',function (e) { 11 console.log(e.target) 12 }) 13 </script>
1 /*** 2 * 事件的绑定元素获取 event.currentTarget 3 * 获取的绑定事件对应的元素 4 * 无论点击的div还是p标签返回的都是事件绑定的元素 div 5 */ 6 var div=document.querySelector('div'); 7 var p=document.querySelector('p'); 8 div.addEventListener('click',function (e) { 9 console.log(e.currentTarget) 10 })
学习是一种态度,坚持是质变的利器!