JS事件绑定的常用方式实例总结


Posted in Javascript onMarch 02, 2019

本文实例讲述了JS事件绑定的常用方式。分享给大家供大家参考,具体如下:

常用的事件绑定的几种方式有三种:

  • 直接在 dom 元素上进行绑定。
  • 用 on 绑定。
  • 用 addEventListener、attachEvent 绑定。

一、直接在 dom 元素上进行绑定

<input id="btn1" type="button" onclick="test();" />

二、用 on 绑定

兼容性:在IE,FF,Chrome,Safari,Mozilla,Opera下都适用。

// onclick绑定
document.body.onclick = () => {
  console.log(111)
}
// 解绑
document.body.onclick = null;

但是,同一个 dom 元素上,on 只能绑定一个同类型事件,后者会覆盖前者,不同类型的事件可以绑定多个。

三、用 addEventListener、attachEvent 绑定

同一个 dom 元素上,用 addEventListener、attachEvent 可以绑定多个同类型事件。

但是,addEventListener 事件执行顺序按照事件绑定的先后顺序执行;attachEvent 事件执行顺序则是随机的。

addEventListener

// 绑定
document.body.addEventListener('click', bodyClick, false);
// 解绑
document.body.removeEventListener('click', bodyClick, false);

注意:removeEventListener 第二个参数要和 addEventListener 指向同一个函数才能解绑成功。

addEventListener 的第三个参数若为 false,函数在冒泡阶段执行;若为 true,函数在捕获阶段执行。默认为 false。

<div id="box">
   <div id="child"></div>
</div>
box.addEventListener("click", function(){
  console.log("box");
}, false);
child.addEventListener("click", function(){
  console.log("child");
});
// 执行顺序为 child box
box.addEventListener("click", function(){
  console.log("box");
}, true);
child.addEventListener("click", function(){
  console.log("child");
});
// 执行顺序为 box child

兼容性

Chrome 和 FireFox 只支持 addEventListener;IE 只支持 attachEvent(IE11开始不支持了)。

所以必须对2种方法做兼容处理。原理是先判断 attachEvent 是否为真,如果为真则用 attachEvent 绑定事件,否则用 addEventListener 绑定事件。

可以封装一个函数做兼容性处理:

//dom绑定事件的元素,ev事件名,fn执行函数
function myAddEvent(dom, ev, fn){
  if(dom.attachEvent){
    dom.attachEvent("on"+ev, fn);
  }else {
    dom.addEventListener(ev, fn, false);
  }
}
myAddEvent(d1, "click", ()=>{
  console.log(1111)
});

另外

以上三种方式绑定的点击事件都可以用下面这条语句触发

document.getElementById("btn").click();

PS:关于javascript事件说明可参考本站javascript事件与功能说明大全:http://tools.3water.com/table/javascript_event

希望本文所述对大家JavaScript程序设计有所帮助。

Javascript 相关文章推荐
验证码按回车不变解决方法
Mar 29 Javascript
解析Jquery取得iframe中元素的几种方法
Jul 04 Javascript
JavaScript获取两个数组交集的方法
Jun 09 Javascript
JavaScript基本的输出和嵌入式写法教程
Oct 20 Javascript
JavaScript中函数表达式和函数声明及函数声明与函数表达式的不同
Nov 15 Javascript
Ionic快速安装教程
Jun 03 Javascript
JQuery控制DIV的选取实现方法
Sep 18 Javascript
pc加载更多功能和移动端下拉刷新加载数据
Nov 07 Javascript
Angularjs修改密码的实例代码
May 26 Javascript
鼠标拖动改变DIV等网页元素的大小的实现方法
Jul 06 Javascript
微信小程序实现上传多张图片、删除图片
Jul 29 Javascript
如何利用node转发请求详解
Sep 17 Javascript
JS实现获取数组中最大值或最小值功能示例
Mar 02 #Javascript
JS使用队列对数组排列,基数排序算法示例
Mar 02 #Javascript
VUE引入第三方js包及调用方法讲解
Mar 01 #Javascript
JavaScript数据结构与算法之二叉树添加/删除节点操作示例
Mar 01 #Javascript
JavaScript数据结构与算法之二叉树实现查找最小值、最大值、给定值算法示例
Mar 01 #Javascript
Angular7.2.7路由使用初体验
Mar 01 #Javascript
vuex实现及简略解析(小结)
Mar 01 #Javascript
You might like
《魔兽争霸3:重制版》翻车了?你想要的我们都没有
2019/11/07 魔兽争霸
超小PHP小马小结(方便查找后门的朋友)
2012/05/05 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(十四)
2014/06/26 PHP
ThinkPHP中pathinfo的访问模式、路径访问模式及URL重写总结
2014/08/23 PHP
js Flash插入函数免激活代码
2009/03/31 Javascript
基于jquery的关于动态创建DOM元素的问题
2010/12/24 Javascript
js拆分字符串并将分割的数据放到数组中的方法
2015/05/06 Javascript
jQuery实现滑动页面固定顶部显示(可根据显示位置消失与替换)
2015/10/28 Javascript
对Vue beforeRouteEnter 的next执行时机详解
2018/08/25 Javascript
详解CommonJS和ES6模块循环加载处理的区别
2018/12/26 Javascript
小程序云开发实现数据库异步操作同步化
2019/05/18 Javascript
微信小程序中悬浮窗功能的实现代码
2019/08/02 Javascript
基于Express框架使用POST传递Form数据
2019/08/10 Javascript
解决vue prop传值default属性如何使用,为何不生效的问题
2020/09/21 Javascript
使用wxpython实现的一个简单图片浏览器实例
2014/07/10 Python
Python3实现生成随机密码的方法
2014/08/23 Python
python中类的一些方法分析
2014/09/25 Python
Python list操作用法总结
2015/11/10 Python
Python的Django框架中使用SQLAlchemy操作数据库的教程
2016/06/02 Python
Django如何使用asyncio协程和ThreadPoolExecutor多线程
2020/10/12 Python
CSS3实现鼠标悬停显示扩展内容
2016/08/24 HTML / CSS
HTML4和HTML5之间除了相似以外的10个主要不同
2012/12/13 HTML / CSS
罗兰·穆雷官网:Roland Mouret
2018/09/28 全球购物
陈欧广告词
2014/03/14 职场文书
企业家王石演讲稿:坚持与放下
2014/04/27 职场文书
查摆问题对照检查材料
2014/08/28 职场文书
资料员岗位职责
2015/02/10 职场文书
学校计划生育责任书
2015/05/09 职场文书
2016年五一劳动节专题校园广播稿
2015/12/17 职场文书
一个家长教育孩子的心得体会
2016/01/15 职场文书
公司年会晚会开幕词
2019/04/02 职场文书
mysql 8.0.24版本安装配置方法图文教程
2021/05/12 MySQL
详解盒子端CSS动画性能提升
2021/05/24 HTML / CSS
sql查询结果列拼接成逗号分隔的字符串方法
2021/05/25 SQL Server
Go获取两个时区的时间差
2022/04/20 Golang
mysql数据库实现设置字段长度
2022/06/10 MySQL