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 相关文章推荐
jquery append 动态添加的元素事件on 不起作用的解决方案
Jul 30 Javascript
使用控制台破解百小度一个月只准改一次名字
Aug 13 Javascript
jQuery实现折叠、展开的菜单组效果代码
Sep 16 Javascript
js接收并转化Java中的数组对象的方法
Aug 11 Javascript
关于javascript的一些知识以及循环详解
Sep 12 Javascript
jquery easyui dataGrid动态改变排序字段名的方法
Mar 02 Javascript
jQuery插件HighCharts绘制2D带有Legend的饼图效果示例【附demo源码下载】
Mar 10 Javascript
vue.js实现含搜索的多种复选框(附源码)
Mar 23 Javascript
浅谈Webpack自动化构建实践指南
Dec 18 Javascript
npm scripts 使用指南详解
Oct 08 Javascript
吃通javascript正则表达式
Apr 21 Javascript
手写Spirit防抖函数underscore和节流函数lodash
Mar 22 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
php escape URL编码
2008/12/10 PHP
同台服务器使用缓存APC效率高于Memcached的演示代码
2010/02/16 PHP
Discuz!下Memcache缓存实现方法
2010/05/28 PHP
js 链式延迟执行DOME
2012/01/04 Javascript
JS文本框不能输入空格验证方法
2013/03/19 Javascript
jQuery获得内容和属性示例代码
2014/01/16 Javascript
JS实现仿Windows经典风格的选项卡Tab切换代码
2015/10/20 Javascript
详解javascript中的事件处理
2015/11/06 Javascript
js获取url传值的方法
2015/12/18 Javascript
浏览器环境下JavaScript脚本加载与执行探析之动态脚本与Ajax脚本注入
2016/01/19 Javascript
node模块机制与异步处理详解
2016/03/13 Javascript
JS+CSS实现鼠标经过弹出一个DIV框完整实例(带缓冲动画渐变效果)
2016/03/25 Javascript
深入理解JS函数的参数(arguments)的使用
2016/05/28 Javascript
vue从使用到源码实现教程详解
2016/09/19 Javascript
jQuery UI Grid 模态框中的表格实例代码
2017/04/01 jQuery
关于javascript获取内联样式与嵌入式样式的实例
2017/06/01 Javascript
JS中使用gulp实现压缩文件及浏览器热加载功能
2017/07/12 Javascript
JavaScript常用事件介绍
2019/01/21 Javascript
Vue登录拦截 登录后继续跳转指定页面的操作
2020/08/04 Javascript
[02:54]辉夜杯主赛事第二日败者组 iG.V赛后采访
2015/12/26 DOTA
Python之读取TXT文件的方法小结
2018/04/27 Python
CSS3 :default伪类选择器使用简介
2018/03/15 HTML / CSS
HTML5拖拉上传文件的简单实例
2017/01/11 HTML / CSS
UNIX命令速查表
2012/03/10 面试题
团员个人的自我评价
2013/12/02 职场文书
物流仓储计划书
2014/01/10 职场文书
《小蝌蚪找妈妈》教学反思
2014/02/21 职场文书
人力资源部经理岗位职责规定
2014/02/23 职场文书
投资合作协议书
2014/04/17 职场文书
求职信怎么写范文
2014/05/26 职场文书
课前一分钟演讲稿
2014/08/26 职场文书
党员个人整改措施
2014/10/24 职场文书
考试作弊检讨书
2015/01/27 职场文书
离婚答辩状范文
2015/05/22 职场文书
运动会观后感
2015/06/09 职场文书
2015年小学语文教师工作总结
2015/10/23 职场文书