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词法作用域与调用对象深入理解
Nov 29 Javascript
javascript 利用Image对象实现的埋点(某处的点击数)统计
Dec 28 Javascript
javascript解析json数据的3种方式
May 08 Javascript
js实现模拟银行卡账号输入显示效果
Nov 18 Javascript
JS模拟实现方法重载示例
Aug 03 Javascript
AngularJS学习笔记(三)数据双向绑定的简单实例
Nov 08 Javascript
Angular.js中处理页面闪烁的方法详解
Mar 09 Javascript
jquery replace方法去空格
May 08 jQuery
详解刷新页面vuex数据不消失和不跳转页面的解决
Jan 30 Javascript
react 创建单例组件的方法
Apr 26 Javascript
微信小程序如何调用json数据接口并解析
Jun 29 Javascript
el-input 标签中密码的显示和隐藏功能的实例代码
Jul 19 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/12/09 PHP
php调用shell的方法
2014/11/05 PHP
php使用cookie保存登录用户名的方法
2015/01/26 PHP
PHP的CURL方法curl_setopt()函数案例介绍(抓取网页,POST数据)
2016/12/14 PHP
正则表达式判断是否存在中文和全角字符和判断包含中文字符串长度
2008/09/27 Javascript
用Jquery实现可编辑表格并用AJAX提交到服务器修改数据
2009/12/27 Javascript
document.getElementById介绍
2011/09/13 Javascript
使用js操作css实现js改变背景图片示例
2014/03/10 Javascript
javascript中使用正则表达式清理table样式的代码
2020/04/01 Javascript
javascript实现鼠标移到Image上方时显示文字效果的方法
2015/08/07 Javascript
Bootstrap基本插件学习笔记之Tooltip提示工具(18)
2016/12/08 Javascript
jquery实现的table排序功能示例
2017/03/10 Javascript
JavaScript内存泄漏的处理方式
2017/11/20 Javascript
JS兼容所有浏览器的DOMContentLoaded事件
2018/01/12 Javascript
原生JS实现获取及修改CSS样式的方法
2018/09/04 Javascript
vue.js引入外部CSS样式和外部JS文件的方法
2019/01/06 Javascript
微信小程序实现发送模板消息功能示例【通过openid推送消息给用户】
2019/05/05 Javascript
原生JS实现天气预报
2020/06/16 Javascript
python BeautifulSoup设置页面编码的方法
2015/04/03 Python
python实现搜索文本文件内容脚本
2018/06/22 Python
python 实现兔子生兔子示例
2019/11/21 Python
Python判断字符串是否为空和null方法实例
2020/04/26 Python
Django DRF路由与扩展功能的实现
2020/06/03 Python
python使用正则表达式匹配txt特定字符串(有换行)
2020/12/09 Python
详解CSS3中Media Queries的相关使用
2015/07/17 HTML / CSS
波兰补充商店:Muscle Power
2018/10/29 全球购物
在子网210.27.48.21/30种有多少个可用地址?分别是什么?
2014/07/27 面试题
高中毕业生自我鉴定
2013/11/03 职场文书
称象教学反思
2014/02/03 职场文书
普罗米修斯教学反思
2014/02/06 职场文书
公司开业庆典主持词
2014/03/21 职场文书
党校培训自我鉴定范文
2014/04/10 职场文书
解除劳动合同证明书模板
2014/11/20 职场文书
2016年幼儿园教师政治学习心得体会
2016/01/23 职场文书
mysql字符串截取函数小结
2021/04/05 MySQL
Spring Data JPA框架的核心概念和Repository接口
2022/04/28 Java/Android