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     })

 

原文地址:https://www.cnblogs.com/evilliu/p/10990158.html