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 相关文章推荐
js中查找最近的共有祖先元素的实现代码
Dec 30 Javascript
仅IE不支持setTimeout/setInterval函数的第三个以上参数
May 25 Javascript
javascript学习笔记(十三) js闭包介绍(转)
Jun 20 Javascript
JavaScript中获取鼠标位置相关属性总结
Oct 11 Javascript
javascript 应用小技巧方法汇总
Jul 05 Javascript
jQuery实现拖拽页面元素并将其保存到cookie的方法
Jun 12 Javascript
Angular.JS内置服务$http对数据库的增删改使用教程
May 07 Javascript
Vue实现搜索 和新闻列表功能简单范例
Mar 16 Javascript
React全家桶环境搭建过程详解
May 18 Javascript
Webpack按需加载打包chunk命名的方法
Sep 22 Javascript
windows下create-react-app 升级至3.3.1版本踩坑记
Feb 17 Javascript
JavaScript实现页面动态验证码的实现示例
Mar 23 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
利用phpExcel实现Excel数据的导入导出(全步骤详细解析)
2013/11/26 PHP
PHP操作文件的一些基本函数使用示例
2014/11/18 PHP
ThinkPHP中使用ajax接收json数据的方法
2014/12/18 PHP
PHP调用.NET的WebService 简单实例
2015/03/27 PHP
thinkPHP统计排行与分页显示功能示例
2016/12/02 PHP
关于ThinkPhp 框架表单验证及ajax验证问题
2017/07/19 PHP
javascript中String类的subString()方法和slice()方法
2011/05/24 Javascript
DOM节点删除函数removeChild()用法实例
2015/01/12 Javascript
javascript搜索框效果实现方法
2015/05/14 Javascript
深入解析JavaScript中的arguments对象
2016/06/12 Javascript
理解javascript中的闭包
2017/01/11 Javascript
微信小程序图表插件(wx-charts)实例代码
2017/01/17 Javascript
vue中路由参数传递可能会遇到的坑
2017/12/07 Javascript
vue路由拦截及页面跳转的设置方法
2018/05/24 Javascript
javascript实现的字符串转换成数组操作示例
2019/06/13 Javascript
javascript移动端 电子书 翻页效果实现代码
2019/09/07 Javascript
python 类对象和实例对象动态添加方法(分享)
2017/12/31 Python
Django 实现下载文件功能的示例
2018/03/06 Python
Django 根据数据模型models创建数据表的实例
2018/05/27 Python
对numpy中向量式三目运算符详解
2018/10/31 Python
Python中的取模运算方法
2018/11/10 Python
Python使用pandas和xlsxwriter读写xlsx文件的方法示例
2019/04/09 Python
python实现logistic分类算法代码
2020/02/28 Python
python+gdal+遥感图像拼接(mosaic)的实例
2020/03/10 Python
Python脚本调试工具安装过程
2021/01/11 Python
夏洛特和乔治婴儿和儿童时装精品店:Charlotte and George
2018/06/06 全球购物
英国排名第一的餐具品牌:Denby Pottery
2019/11/01 全球购物
英国现代、当代和设计师家具店:Furntastic
2020/07/18 全球购物
Sunglass Hut巴西网上商店:男女太阳镜
2020/10/04 全球购物
中药学自荐信
2014/06/15 职场文书
集体生日活动方案
2014/08/18 职场文书
验房委托书
2014/08/30 职场文书
党员转正介绍人意见
2015/06/03 职场文书
八月迷情观后感
2015/06/11 职场文书
学历证明范文
2015/06/16 职场文书
pandas中DataFrame检测重复值的实现
2021/05/26 Python