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 相关文章推荐
在JavaScript中使用inline函数的问题
Mar 08 Javascript
JavaScript 事件属性绑定带参数的函数
Mar 13 Javascript
js最简单的拖拽效果实现代码
Sep 24 Javascript
JS中的prototype与面向对象的实例讲解
May 22 Javascript
jQuery实现的图文高亮滚动切换特效实例
Aug 10 Javascript
解决angular的post请求后SpringMVC后台接收不到参数值问题的方法
Dec 10 Javascript
jQuery EasyUi实战教程之布局篇
Jan 26 Javascript
关于JS Lodop打印插件打印Bootstrap样式错乱问题的解决方案
Dec 23 Javascript
Bootstrap php制作动态分页标签
Dec 23 Javascript
flag和jq on 的绑定多个对象和方法(必看)
Feb 27 Javascript
AngularJS使用ng-repeat遍历二维数组元素的方法详解
Nov 11 Javascript
vue/cli 配置动态代理无需重启服务的方法
May 20 Vue.js
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
DOTA2游戏同人动画《龙之血》导演接受采访
2021/03/05 欧美动漫
PHP下对数组进行排序的函数
2010/08/08 PHP
PHP与Java进行通信的实现方法
2013/10/21 PHP
php实现的简单检验登陆类
2015/06/18 PHP
php版微信公众平台入门教程之开发者认证的方法
2016/09/26 PHP
PHP基于ICU扩展intl快速实现汉字转拼音及按拼音首字母分组排序的方法
2017/05/03 PHP
PHP操作Postgresql封装类与应用完整实例
2018/04/24 PHP
php测试kafka项目示例
2020/02/06 PHP
点击下载链接 弹出页面实现代码
2009/10/01 Javascript
JavaScript去掉空格的方法集合
2010/12/28 Javascript
JavaScript中链式调用之研习
2011/04/07 Javascript
JQuery文本改变触发事件如聚焦事件、失焦事件
2014/01/15 Javascript
jquery实现textarea 高度自适应
2015/03/11 Javascript
jquery实现TAB选项卡鼠标经过带延迟效果的方法
2015/07/27 Javascript
Vue.js绑定HTML class数组语法错误的原因分析
2016/10/19 Javascript
Bootstrap导航条鼠标悬停下拉菜单
2017/01/04 Javascript
jQuery实现的简单拖动层示例
2017/02/22 Javascript
详解JavaScript中return的用法
2017/05/08 Javascript
JavaScript正则表达式的贪婪匹配和非贪婪匹配
2017/09/05 Javascript
jQuery UI Draggable + Sortable 结合使用(实例讲解)
2017/09/07 jQuery
Vuejs在v-for中,利用index来对第一项添加class的方法
2018/03/03 Javascript
vue引入axios同源跨域问题
2018/09/27 Javascript
ionic2.0双击返回键退出应用
2019/09/17 Javascript
微信小程序实现星级评价
2019/11/20 Javascript
nodejs如何在package.json中设置多条启动命令
2020/03/16 NodeJs
python同时给两个收件人发送邮件的方法
2015/04/30 Python
python修改操作系统时间的方法
2015/05/18 Python
python利用urllib和urllib2访问http的GET/POST详解
2017/09/27 Python
Python实现的求解最大公约数算法示例
2018/05/03 Python
Windows+Anaconda3+PyTorch+PyCharm的安装教程图文详解
2020/04/03 Python
万宝龙英国官网:Montblanc手表、书写工具、皮革和珠宝
2018/10/16 全球购物
描述内存分配方式以及它们的区别
2016/10/15 面试题
nohup的用法
2014/08/10 面试题
青年文明号事迹材料
2014/01/18 职场文书
机关党员四风问题个人整改措施
2014/10/26 职场文书
《月光曲》教学反思
2016/02/16 职场文书