Js on及addEventListener原理用法区别解析


Posted in Javascript onJuly 11, 2020

一.首先介绍两者的用法:

1.on的用法:以onclick为例

第一种:

obj.onclick = function(){
//do something..
}

第二种:

obj.onclick= fn;
function fn (){
//do something...
}

第三种:当函数fn有参数的情况下使用匿名函数来传参:

obj.onclick = function(){fn(param)};
function fn(param){
//do something..
}

不能够这样写:错误写法:obj.onclick= fn(param):

因为这样写函数会立即执行,不会等待点击触发,特别注意一下

2.addEventListener的用法:

形式:

addEventListener(event,funtionName,useCapture)

参数:

  • event:事件的类型如 “click”
  • funtionName:方法名
  • useCapture(可选):布尔值,指定事件是否在捕获或冒泡阶段执行。
  • true - 事件句柄在捕获阶段执行
  • false- false- 默认。事件句柄在冒泡阶段执行

写法:

第一种:

obj.addEventListener("click",function(){
//do something
}));

第二种,没参数可以直接写函数名

obj.addEventListener("click",fn,fasle));
function fn(){
//do something..
}

第三种:函数有参数时需要使用匿名函数来传递参数

obj.addEventListener("click",function(){fn(parm)},false);

二.两者的区别

1.on事件会被后面的on的事件覆盖

以onclick为例:

//obj是一个dom对象,下同//注册第一个点击事件
obj.onclick(function(){
alert("hello world");
});
//注册第二个点击事件
obj.onclick(function(){
alert("hello world too");
});

最终会只有弹框输出:

hello world too

2.addEventListener 则不会覆盖。

//注册第一个点击事件
obj.addEventListener("click",function(){
alert("hello world");
}));
//注册第二个点击事件
obj.addEventListener("click",function(){
alert("hello world too");
}));

这样会连续输出:

hello world
hello world too

三.addEventListener注意事项:

1.特别说明addEventListener不被IE9以下兼容,IE9以下用使用attachEvent()

obj.attachEvent(event,funtionName);

参数:

event:事件类型(需要写成“onclick”前面加on,这个与addEventListener不同)

funtionName:方法名(要参数是也是需要使用匿名函数来传参)

四.事件集合:

1.鼠标事件:

  • click(单击)
  • dbclick(双击)
  • mousedown(鼠标按下)
  • mouseout(鼠标移走)
  • mouseover(鼠标移入)
  • mouseup(鼠标弹起)
  • mousemove(鼠标移动)

2.键盘事件:

  • keydown(键按下)
  • keypress(按键)
  • keyup(键起来)
  • 3.HTML事件:
  • load(加载页面)
  • unload(卸载离开页面)
  • change(改变内容)
  • scroll(滚动)
  • focus(获得焦点)
  • blur(失去焦点)

五.总结:

onXXX与addEventListener都是为dom元素添加事件监听,使其在事件发生后执行相应的代码,操作。有了它们我们实现了页面与用户交互。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
javascript 解析url的search方法
Feb 09 Javascript
document.documentElement的一些使用技巧
Apr 18 Javascript
简洁Ajax函数处理(示例代码)
Nov 15 Javascript
JS实现超精简响应鼠标显示二级菜单代码
Sep 12 Javascript
JS实现不使用图片仿Windows右键菜单效果代码
Oct 22 Javascript
js仿支付宝填写支付密码效果实现多方框输入密码
Mar 09 Javascript
Vue数据驱动模拟实现3
Jan 11 Javascript
javaScript实现鼠标在文字上悬浮时弹出悬浮层效果
Apr 12 Javascript
详解vuex中mapState,mapGetters,mapMutations,mapActions的作用
Apr 13 Javascript
Vue组件中prop属性使用说明实例代码详解
May 31 Javascript
vue-router动态设置页面title的实例讲解
Aug 30 Javascript
小程序新版订阅消息模板消息
Dec 31 Javascript
JS call()及apply()方法使用实例汇总
Jul 11 #Javascript
JS如何定义用字符串拼接的变量
Jul 11 #Javascript
基于原生js实现判断元素是否有指定class名
Jul 11 #Javascript
详解在IDEA中将Echarts引入web两种方式(使用js文件和maven的依赖导入)
Jul 11 #Javascript
详解element-ui 表单校验 Rules 配置 常用黑科技
Jul 11 #Javascript
uniapp,微信小程序中使用 MQTT的问题
Jul 11 #Javascript
VSCode 配置uni-app的方法
Jul 11 #Javascript
You might like
全国FM电台频率大全 - 14 江西省
2020/03/11 无线电
PHP 日志缩略名的创建函数代码
2010/05/26 PHP
在WAMP环境下搭建ZendDebugger php调试工具的方法
2011/07/18 PHP
深入PHP与浏览器缓存的分析
2013/06/03 PHP
PHP创建桌面快捷方式的实例代码
2014/02/17 PHP
php基础教程
2015/08/26 PHP
thinkphp多层MVC用法分析
2015/12/30 PHP
PHP分享图片的生成方法
2018/04/25 PHP
jquery读取xml文件实现省市县三级联动的方法
2015/05/29 Javascript
jquery实现动静态条形统计图
2015/08/17 Javascript
nodejs实现bigpipe异步加载页面方案
2016/01/26 NodeJs
深入理解jquery中的each用法
2016/12/14 Javascript
js转换对象为xml
2017/02/17 Javascript
jQuery倒计时代码(超简单)
2017/02/27 Javascript
vue计算属性及使用详解
2018/04/02 Javascript
Vue项目中添加锁屏功能实现思路
2018/06/29 Javascript
微信小程序实现打开并下载服务器上面的pdf文件到手机
2019/09/20 Javascript
谈谈IntersectionObserver懒加载的具体使用
2019/10/15 Javascript
微信小程序实现上拉加载功能
2019/11/20 Javascript
解决Ant Design Modal内嵌Form表单initialValue值不动态更新问题
2020/10/29 Javascript
vue+Element-ui实现分页效果
2020/11/15 Javascript
[07:43]《辉夜杯》公开赛晋级外卡赛战队—TRG训练生活探秘
2015/12/11 DOTA
[03:48]大碗DOTA
2019/07/25 DOTA
Python常用算法学习基础教程
2017/04/13 Python
python3 字符串知识点学习笔记
2020/02/08 Python
Python文件读写w+和r+区别解析
2020/03/26 Python
精细化工应届生求职信
2013/11/17 职场文书
行政专员求职信范文
2014/05/03 职场文书
铣床操作工岗位职责
2014/06/13 职场文书
领导干部贪图享乐整改措施
2014/09/21 职场文书
离婚协议书怎么写2014
2014/09/30 职场文书
2014年保洁工作总结
2014/11/24 职场文书
iPhone13 Pro外观确定,升级4800万镜头,4月20日发新品
2021/04/15 数码科技
Java 中的 Unsafe 魔法类的作用大全
2021/06/26 Java/Android
项目中Nginx多级代理是如何获取客户端的真实IP地址
2022/05/30 Servers
Android实现图片九宫格
2022/06/28 Java/Android