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 相关文章推荐
DOM精简教程
Oct 03 Javascript
suggestion开发小结以及对键盘事件的总结(针对中文输入法状态)
Dec 20 Javascript
js+JQuery返回顶部功能如何实现
Dec 03 Javascript
JavaScript 产生不重复的随机数三种实现思路
Dec 13 Javascript
jQuery实现单行文字间歇向上滚动源代码
Jun 02 Javascript
开发 Internet Explorer 右键功能表(ContextMenu)
Jul 03 Javascript
jQuery实现仿QQ在线客服效果的滚动层代码
Oct 15 Javascript
jQuery ajax 当async为false时解决同步操作失败的问题
Nov 18 Javascript
jQuery插件FusionCharts绘制的2D双柱状图效果示例【附demo源码】
May 13 jQuery
Angular 2.x学习教程之结构指令详解
May 25 Javascript
vue 文件目录结构详解
Nov 24 Javascript
微信小程序自定义弹出模态框禁止底部滚动功能
Mar 09 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
PHP IPV6正则表达式验证代码
2010/02/16 PHP
队列在编程中的实际应用(php)
2010/09/04 PHP
php的$_FILES的临时储存文件与回收机制实测过程
2013/07/12 PHP
zf框架的zend_cache缓存使用方法(zend框架)
2014/03/14 PHP
PHP获取网页所有连接的方法(附demo源码下载)
2016/03/30 PHP
PHP等比例压缩图片的实例代码
2018/07/26 PHP
yii2.0框架多模型操作示例【添加/修改/删除】
2020/04/13 PHP
javascript编程起步(第二课)
2007/01/10 Javascript
jquery实现网页查找功能示例分享
2014/02/12 Javascript
javascript性能优化之DOM交互操作实例分析
2015/12/12 Javascript
AngularJS基础 ng-readonly 指令简单示例
2016/08/02 Javascript
jQuery实现弹窗居中效果类似alert()
2017/02/27 Javascript
vue时间格式化实例代码
2017/06/13 Javascript
Vue入门之数量加减运算操作示例
2018/12/11 Javascript
javascript防抖函数debounce详解
2019/06/11 Javascript
微信小程序实现张图片合成为一张并下载
2019/07/16 Javascript
JavaScript实现移动端弹窗后禁止滚动
2020/05/25 Javascript
vue props 一次传多个值实例
2020/07/22 Javascript
js实现批量删除功能
2020/08/27 Javascript
JavaScript实现商品评价五星好评
2020/11/30 Javascript
[04:44]DOTA2 2017全国高校联赛视频回顾
2017/08/21 DOTA
MySQLdb ImportError: libmysqlclient.so.18解决方法
2014/08/21 Python
Python教程之全局变量用法
2016/06/27 Python
将python代码和注释分离的方法
2018/04/21 Python
10 分钟快速入门 Python3的教程
2019/01/29 Python
python判断文件夹内是否存在指定后缀文件的实例
2019/06/10 Python
python检测服务器端口代码实例
2019/08/31 Python
俄罗斯护发和专业化妆品购物网站:Hihair
2019/09/28 全球购物
波兰在线杂货店:Polski Koszyk
2019/11/02 全球购物
电气专业应届生求职信
2013/11/01 职场文书
财务主管自我鉴定
2014/01/17 职场文书
租房协议书范文
2014/08/20 职场文书
个人诉讼委托书范本
2014/10/17 职场文书
2015年暑假生活总结
2015/07/13 职场文书
JavaScript实现简单计时器
2021/06/22 Javascript
php实现自动生成验证码的实例讲解
2021/11/17 PHP