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中dequeue()方法用法实例
Dec 29 Javascript
10条建议帮助你创建更好的jQuery插件
May 18 Javascript
jQuery自定义滚动条完整实例
Jan 08 Javascript
JavaScript“尽快失败”的原则实例详解
Oct 08 Javascript
js倒计时显示实例
Dec 11 Javascript
js实现的在线调色板功能完整实例
Dec 21 Javascript
jquery实现(textarea)placeholder自动换行
Dec 22 Javascript
Echarts基本用法_动力节点Java学院整理
Aug 11 Javascript
详解VueJS应用中管理用户权限
Feb 02 Javascript
koa2使用ejs和nunjucks作为模板引擎的使用
Nov 27 Javascript
微信小程序textarea层级过高(盖住其他元素)问题的解决办法
Mar 04 Javascript
移动端手指操控左右滑动的菜单
Sep 08 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
linux下使用crontab实现定时PHP计划任务失败的原因分析
2014/07/05 PHP
3种php生成唯一id的方法
2015/11/23 PHP
PHP实现上一篇下一篇的方法实例总结
2016/09/22 PHP
php lcg_value与mt_rand生成0~1随机小数的效果对比分析
2017/04/05 PHP
PHP中实现中文字串截取无乱码的解决方法
2018/05/29 PHP
一个报数游戏js版(约瑟夫环问题)
2010/08/05 Javascript
jquery获取自定义属性(attr和prop)实例介绍
2013/04/21 Javascript
div+css+js实现无缝滚动类似marquee无缝滚动兼容firefox
2013/08/29 Javascript
js中的referrer返回上一页使用介绍
2013/09/26 Javascript
Nodejs进程管理模块forever详解
2014/06/01 NodeJs
招聘网站基于jQuery实现自动刷新简历
2015/05/10 Javascript
Vue.js每天必学之组件与组件间的通信
2016/09/08 Javascript
Angular2 多级注入器详解及实例
2016/10/30 Javascript
浅谈Nodejs中的作用域问题
2016/12/26 NodeJs
详解vue-cli中配置sass
2017/06/21 Javascript
nodejs接入阿里大鱼短信验证码的方法
2017/07/10 NodeJs
详解Vue中localstorage和sessionstorage的使用
2017/12/22 Javascript
Vue2.5学习笔记之如何在项目中使用和配置Vue
2018/09/26 Javascript
jquery使用FormData实现异步上传文件
2018/10/25 jQuery
JS双向链表实现与使用方法示例(增加一个previous属性实现)
2019/01/31 Javascript
python学习之编写查询ip程序
2016/02/27 Python
详解Python中最难理解的点-装饰器
2017/04/03 Python
对Python中列表和数组的赋值,浅拷贝和深拷贝的实例讲解
2018/06/28 Python
python交换两个变量的值方法
2019/01/12 Python
python自动化测试无法启动谷歌浏览器问题
2019/10/10 Python
Python3搭建http服务器的实现代码
2020/02/11 Python
Python基于class()实现面向对象原理详解
2020/03/26 Python
浅析Python迭代器的高级用法
2020/07/16 Python
CSS3实现超酷的黑猫警长首页
2016/04/26 HTML / CSS
什么是测试驱动开发(TDD)
2012/02/15 面试题
自我评价怎么写正确呢?
2013/12/02 职场文书
售后服务承诺书模板
2014/05/21 职场文书
环境卫生倡议书
2014/08/29 职场文书
基层党组织整改方案
2014/10/25 职场文书
图书馆义工感想
2015/08/07 职场文书
2019年度政务公开考核工作总结模板
2019/11/11 职场文书