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 相关文章推荐
基于jquery实现的鼠标滑过按钮改变背景图片
Jul 15 Javascript
谈谈JSON对象和字符串之间的相互转换JSON.stringify(obj)和JSON.parse(string)
Oct 01 Javascript
基于jquery实现页面滚动时顶部导航显示隐藏
Apr 20 Javascript
基于jQuery和hwSlider实现内容左右滑动切换效果附源码下载(一)
Jun 22 Javascript
js完整倒计时代码分享
Sep 18 Javascript
node.js实现微信JS-API封装接口的示例代码
Sep 06 Javascript
通过一次报错详细谈谈Point事件
May 17 Javascript
JS实现关键词高亮显示正则匹配
Jun 22 Javascript
vue-router 源码实现前端路由的两种方式
Jul 02 Javascript
VUE简单的定时器实时刷新的实现方法
Jan 20 Javascript
Vue实现将数据库中带html标签的内容输出(原始HTML(Raw HTML))
Oct 28 Javascript
关于引入vue.js 文件的知识点总结
Jan 28 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函数
2006/10/09 PHP
PHP类中Static方法效率测试代码
2010/10/17 PHP
PHP flush 函数使用注意事项
2016/08/26 PHP
PHP使用GD库输出汉字的方法【测试可用】
2016/11/10 PHP
PHP实现更改hosts文件的方法示例
2017/08/08 PHP
PHP7修改的函数
2021/03/09 PHP
Ctrl+Enter提交内容信息
2006/06/26 Javascript
几个javascript操作word的参考代码
2009/10/26 Javascript
javascript 基础篇3 类,回调函数,内置对象,事件处理
2012/03/14 Javascript
javascript页面渲染速度测试脚本分享
2014/04/15 Javascript
JS循环遍历JSON数据的方法
2014/07/08 Javascript
js实现网页标题栏闪烁提示效果实例分析
2014/11/20 Javascript
原生js实现数字字母混合验证码的简单实例
2015/12/10 Javascript
修改js confirm alert 提示框文字的简单实例
2016/06/10 Javascript
JS递归遍历对象获得Value值方法技巧
2016/06/14 Javascript
nodejs个人博客开发第一步 准备工作
2017/04/12 NodeJs
最全的JavaScript开发工具列表 总有一款适合你
2017/06/29 Javascript
解决ionic和angular上拉加载的问题
2017/08/03 Javascript
使用vue + less 实现简单换肤功能的示例
2018/02/21 Javascript
layui-laydate时间日历控件使用方法详解
2018/11/15 Javascript
详解微信小程序开发(项目从零开始)
2019/06/06 Javascript
python中print的不换行即时输出的快速解决方法
2016/07/20 Python
Python获取某一天是星期几的方法示例
2017/01/17 Python
详谈Python3 操作系统与路径 模块(os / os.path / pathlib)
2018/04/26 Python
python GUI库图形界面开发之PyQt5布局控件QGridLayout详细使用方法与实例
2020/03/06 Python
Pycharm调试程序技巧小结
2020/08/08 Python
Pyinstaller打包Scrapy项目的实现步骤
2020/09/22 Python
Python加载数据的5种不同方式(收藏)
2020/11/13 Python
医院办公室主任职责
2013/12/29 职场文书
考试违纪检讨书
2014/02/02 职场文书
法学专业毕业生自荐信
2014/06/11 职场文书
代理人委托书
2014/08/01 职场文书
施工安全汇报材料
2014/08/17 职场文书
学校机关党总支领导班子整改工作方案
2014/10/26 职场文书
《法国号》教学反思
2016/02/22 职场文书
CentOS MySql8 远程连接实战
2022/04/19 MySQL