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 相关文章推荐
做网页的一些技巧
Feb 01 Javascript
jQuery操作CheckBox的方法介绍(选中,取消,取值)
Feb 04 Javascript
实例代码讲解jquery easyui动态tab页
Nov 17 Javascript
基于jquery实现动态竖向柱状条特效
Feb 12 Javascript
浅谈bootstrap源码分析之tab(选项卡)
Jun 06 Javascript
Vue.js中用v-bind绑定class的注意事项
Dec 13 Javascript
Bootstrap弹出框(Popover)被挤压的问题小结
Jul 11 Javascript
利用vue组件自定义v-model实现一个Tab组件方法示例
Dec 06 Javascript
jQuery解析json格式数据示例
Sep 01 jQuery
详解ES6 export default 和 import语句中的解构赋值
May 28 Javascript
vue 实现移动端键盘搜索事件监听
Nov 06 Javascript
JavaScript实现筛选数组
Mar 02 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简单命令代码集锦
2007/09/24 PHP
PHP+jQuery 注册模块开发详解
2014/10/14 PHP
php正则修正符用法实例详解
2016/12/29 PHP
laravel 模型查询按照whereIn排序的示例
2019/10/16 PHP
jquery.lazyload  实现图片延迟加载jquery插件
2010/02/06 Javascript
js对象关系图 方便dom操作
2012/03/18 Javascript
jQuery 过滤not()与filter()实例代码
2012/05/10 Javascript
firefox浏览器不支持innerText的解决方法
2013/08/07 Javascript
JQuery的Ajax中Post方法传递中文出现乱码的解决方法
2014/10/21 Javascript
JS在可编辑的div中的光标位置插入内容的方法
2014/11/20 Javascript
node.js中的fs.unlink方法使用说明
2014/12/15 Javascript
JavaScript 性能优化小结
2015/10/12 Javascript
AngularJS在IE8的不支持的解决方法
2016/05/13 Javascript
深入浅析JavaScript中的Function类型
2016/07/09 Javascript
vue 组件简介
2020/07/31 Javascript
[02:49]2018DOTA2亚洲邀请赛主赛事决赛日战况回顾 Mineski鏖战5局夺得辉耀
2018/04/10 DOTA
Django1.3添加app提示模块不存在的解决方法
2014/08/26 Python
Python正则表达式匹配中文用法示例
2017/01/17 Python
Django中Forms的使用代码解析
2018/02/10 Python
使用tensorflow实现线性svm
2018/09/07 Python
实现Python与STM32通信方式
2019/12/18 Python
Boda Skins皮衣官网:奢侈皮夹克,全球配送
2016/12/15 全球购物
美国复古街头服饰精品店:Need Supply Co.
2017/02/22 全球购物
马来西亚与新加坡长途巴士售票网站:BusOnlineTicket.com
2018/11/05 全球购物
大学自我鉴定范文
2013/12/26 职场文书
上班早退检讨书
2014/01/09 职场文书
信息科学与技术专业求职信范文
2014/02/20 职场文书
电工工作职责范本
2014/02/22 职场文书
挂牌仪式策划方案
2014/05/18 职场文书
和谐家庭演讲稿
2014/05/24 职场文书
运输企业安全生产责任书
2014/07/28 职场文书
跑吧孩子观后感
2015/06/10 职场文书
小学生暑假安全公约
2015/07/14 职场文书
2015年幼儿园国庆节活动总结
2015/07/30 职场文书
优秀志愿者感言
2015/08/01 职场文书
三八红旗手主要事迹材料
2015/11/04 职场文书