前端绑定事件总结

前言

前端开发很多情况下都需要绑定事件,不同的事件对应不同的触发方式,不同需求下需要合适的事件,最近在开发中遇到了绑定事件的问题,所以总结一下前端绑定事件。

事件:元素天生具备的行为方式(和写不写JS代码没有关系)【onclick不是事件,click才是事件,浏览器会把一些常用事件挂载到元素对象的私有属性上,让我们可以实现DOM0事件绑定】,当我们去操作元素的时候会触发元素的很多事件
事件绑定:给当前元素的某个事件绑定方法,目的是让当前元素某个事件被触发时,做出一些反应

事件绑定方式

1.行内式

<a href="javascript:alert('Hello JavaScript')">点一下试试</a>

直接在代码中添加javascript代码,以属性的形式写在元素里面

2.在js中绑定

Dom 0级事件绑定

/* 猫二号 */
var btn2 = document.getElementById('btnId2'); //1.获取事件源:“猫二号”按钮。
btn2.onclick = function() { //2.绑定事件,即将事件类型(鼠标点击(onclick))绑定到事件源上。
    alert('捉老鼠二号'); //3.编写事件处理程序:弹出一个警告框。
};
/* 猫三号 */
var btn3 = document.getElementById('btnId3');
btn3.onclick = catchFunc; //catchFunc是函数名
// btn3['onclick'] = catchFunc; //catchFunc是函数名

元素对象.事件名()=匿名函数;或者是元素对象.事件名()=函数名;

3.用监听事件绑定

DOM 2级事件绑定

1.元素对象.addEventListener('事件名(不带on)', 匿名函数); //IE9及其以上才支持

2.元素对象.attacheEvent('事件名(带on)', 匿名函数); //IE8及其以下才支持

/* 猫四号 *//* IE9及其以上才支持 */
var btn4 = document.getElementById('btnId4');
btn4.addEventListener('click', function() { //注意这里的事件类型(鼠标点击('click'))。
    alert('捉老鼠四号');
})
//btn4.addEventListener('click', catchFunc);
/* 猫五号 *//* IE8及其以下才支持 */
var btn5 = document.getElementById('btnId5');
btn5.attacheEvent('onclick', function() { //注意这里的事件类型(鼠标点击('onclick'))。
    alert('捉老鼠五号');
})
//btn5.attacheEvent('onclick',catchFunc);
注:同一个元素同一个事件可以注册多个监听器,按注册顺序依次执行。(IE8及其以下的按注册顺序相反顺序执行)
例:以此方式(根据浏览器选择合适的)对这里的按钮再进行一次事件绑定,那么将依次执行这两次绑定的事件。

DOM 0级和DOM 2级的区别

简单来说,Dom 0级事件绑定只能为dom元素绑定一个事件,后绑定的事件会覆盖之前绑定的事件,所以当绑定多个事件时相当于绑定了最后一个事件。

而DOM 2级事件可以绑定多个事件,当触发事件时会按顺序执行绑定的事件。

事件总结

  • 表单元素常用事件
  • blur:失去焦点
  • focus:获取焦点
  • change:内容改变       值被修改后需要鼠标点击输入框外才会触发
  • select:被选中事件
  • 键盘常用事件行为
  • keydown:键盘按下
  • keyup:键盘抬起
  • keypress:键盘按下(中文输入法不能触发,英文状态下可以触发,因为文本被输入到文本框中)

鼠标常用事件行为

  • click:点击(不是单击)
  • dblclick:双击(300ms之内连续触发两次点击事件)
  • mouseover:鼠标滑过
  • mouseout:鼠标滑出
  • mouseenter: 鼠标进入
  • mouseleave: 鼠标离开
  • mousedown:鼠标按下(左键)
  • mouseup:鼠标左键抬起
  • mousewheel:鼠标滚轮滚动
  • 其他常用事件行为
  • load:加载成功
  • error:加载失败
  • scroll:
  • resize:大小改变事件:window.onresize:浏览器窗口改变大小触发该事件

事件属性

type:当前触发事件的类型
target:事件源(当前鼠标操作的是那个元素)(IE6-8没有该属性,用srcElement这个属性代表事件源)
preventDefault:作用:阻止事件的默认行为;(IE6-8没有该方法,使用 returnValue=false处理)
stopPropagation:阻止事件的冒泡传播 [IE6-8不兼容,使用cancelBubble=true来处理]

mouseover和mouseenter事件的区别

区别mouseovermouseenter
区别1存在冒泡传播机制冒泡传播机制被浏览器阻止
区别2 当鼠标从父元素进入到子元素时,首先会触发父元素的mouseout事件,再触发子元素的mouseover事件,由于冒泡传播机制,导致父元素的mouseover事件也被触发当鼠标从父元素进入到子元素时,并不会触发父元素的mouseout事件,但是触发了子元素的mouseenter事件,由于浏览器阻止了它的冒泡传播,所以父元素的该事件不会被触发

mouseout和mouseleave的区别和mouseover和mouseenter相类似。

mouseover和mouseout为一组,mouseenter和mouseleave为一组。

事件委托

利用了冒泡机制,将在目标元素上想要绑定的事件绑定到其父元素上,从而减少了事件绑定的次数,可以一次在多个元素上添加相应事件。

!! mouseenter和mouseleave不行,因为冒泡传播机制被浏览器阻止。

冒泡和捕获

冒泡:从子元素传递到父元素,层层向外。

捕获:从父元素传递到子元素,层层向内。

在点击一个dom元素时,都是先捕获,捕获阶段不会触发绑定事件,之后进入冒泡阶段,触发元素的绑定事件。

参考文章

这篇文章十分细致的对前端事件进行了十分细致的讲解

JS基础知识(十一)DOM0和DOM2级事件_qq_23389687的博客-CSDN博客_dom2级事件

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值