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放大镜效果
Dec 25 Javascript
jquery限定文本框只能输入数字(整数和小数)
Jan 08 Javascript
jQuey将序列化对象在前台显示地实现代码(方法总结)
Dec 13 Javascript
js实现漫天星星效果
Jan 19 Javascript
微信小程序中使用javascript 回调函数
May 11 Javascript
webpack2.0配置postcss-loader的方法
Aug 17 Javascript
详解react-native-fs插件的使用以及遇到的坑
Sep 12 Javascript
AngularJs ng-change事件/指令的用法小结
Nov 01 Javascript
微信小程序自定义弹窗wcPop插件
Nov 19 Javascript
JavaScript 引用类型实例详解【数组、对象、严格模式等】
May 13 Javascript
原生JS封装拖动验证滑块的实现代码示例
Jun 01 Javascript
vue同个按钮控制展开和折叠同个事件操作
Jul 29 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
[EPIC] Larva vs Flash ZvT @ Crossing Field [2017-10-09]
2020/03/17 星际争霸
使用PHP制作新闻系统的思路
2006/10/09 PHP
ThinkPHP框架任意代码执行漏洞的利用及其修复方法
2014/07/04 PHP
浅谈PHP中Stream(流)
2015/06/08 PHP
php表单处理操作
2017/11/16 PHP
laravel实现按月或天或小时统计mysql数据的方法
2019/10/09 PHP
Thinkphp5+Redis实现商品秒杀代码实例讲解
2020/12/29 PHP
JQuery datepicker 使用方法
2011/05/20 Javascript
网站内容禁止复制和粘贴、另存为的js代码
2014/02/26 Javascript
将JavaScript的jQuery库中表单转化为JSON对象的方法
2015/11/17 Javascript
Adapter适配器模式在JavaScript设计模式编程中的运用分析
2016/05/18 Javascript
jQuery实现左侧导航模块的显示与隐藏效果
2016/07/04 Javascript
jQuery实现公告新闻自动滚屏效果实例代码
2016/07/14 Javascript
详解Javascript中prototype属性(推荐)
2016/09/03 Javascript
jquery实现的回旋滚动效果完整实例【附demo源码下载】
2016/09/20 Javascript
Vue.js教程之axios与网络传输的学习实践
2017/04/29 Javascript
jQuery实现火车票买票城市选择切换功能
2017/09/15 jQuery
vue生成随机验证码的示例代码
2017/09/29 Javascript
详解 vue.js用法和特性
2017/10/15 Javascript
JavaScript生成简单等差数列
2017/11/28 Javascript
详解json串反转义(消除反斜杠)
2019/08/12 Javascript
微信小程序中插入激励视频广告并获取收益(实例代码)
2019/12/06 Javascript
[43:48]Ti4正赛第一天 VG vs NEWBEE 2
2014/07/19 DOTA
[01:11:15]VGJ.S vs Secret 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
mac下给python3安装requests库和scrapy库的实例
2018/06/13 Python
解决Shell执行python文件,传参空格引起的问题
2018/10/30 Python
Python安装与卸载流程详细步骤(图解)
2020/02/20 Python
python 已知一个字符,在一个list中找出近似值或相似值实现模糊匹配
2020/02/29 Python
Python面向对象程序设计之继承、多态原理与用法详解
2020/03/23 Python
pycharm实现print输出保存到txt文件
2020/06/01 Python
Waterford加拿大官方网站:世界著名的水晶杯品牌
2016/11/01 全球购物
六查六看自检自查剖析材料
2014/10/14 职场文书
贪污受贿检讨书范文
2014/11/19 职场文书
首席执行官观后感
2015/06/03 职场文书
上甘岭观后感
2015/06/10 职场文书
一年级下册数学教学反思
2016/02/16 职场文书