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 构造函数 实例分析
Nov 26 Javascript
JavaScript 一行代码,轻松搞定浮动快捷留言-V2升级版
Apr 02 Javascript
Javascript 加载和执行-性能提高篇
Dec 28 Javascript
Javascript 命名空间模式
Nov 01 Javascript
jQuery设置和获取HTML、文本和值示例
Jul 08 Javascript
JQuery设置获取下拉菜单某个选项的值(比较全)
Aug 05 Javascript
HTML5 Shiv完美解决IE(IE6/IE7/IE8)不兼容HTML5标签的方法
Nov 25 Javascript
jQuery实现边框动态效果的实例代码
Sep 23 Javascript
微信小程序(应用号)开发新闻客户端实例
Oct 24 Javascript
Node.js 数据加密传输浅析
Nov 16 Javascript
在layui中select更改后生效的方法
Sep 05 Javascript
js 根据对象数组中的属性进行排序实现代码
Sep 12 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
无线电广播的开始
2002/01/30 无线电
一个可以删除字符串中HTML标记的PHP函数
2006/10/09 PHP
php中导出数据到excel时数字变为科学计数的解决方法
2013/02/03 PHP
ThinkPHP表单自动提交验证实例教程
2014/07/18 PHP
一个非常完美的读写ini格式的PHP配置类分享
2015/02/12 PHP
Zend Framework教程之Application用法实例详解
2016/03/14 PHP
PHP http请求超时问题解决方案
2020/11/13 PHP
javascript中style.left和offsetLeft的用法说明
2014/03/07 Javascript
node中socket.io的事件使用详解
2014/12/15 Javascript
JavaScript实现的简单拖拽效果
2015/06/01 Javascript
原生JS实现拖拽图片效果
2020/08/27 Javascript
bootstrap weebox 支持ajax的模态弹出框
2017/02/23 Javascript
使用JavaScript中的lodash编写双色球效果
2018/06/24 Javascript
jquery获取file表单选择文件的路径、名字、大小、类型
2019/01/18 jQuery
[04:03]辉夜杯主赛事 12月25日RECAP精彩回顾
2015/12/26 DOTA
[47:21]Liquid vs TNC Supermajor 胜者组 BO3 第一场 6.4
2018/06/05 DOTA
python发送HTTP请求的方法小结
2015/07/08 Python
Python selenium文件上传方法汇总
2020/11/19 Python
python使用ddt过程中遇到的问题及解决方案【推荐】
2018/10/29 Python
在pycharm中创建django项目的示例代码
2020/05/28 Python
使用keras时input_shape的维度表示问题说明
2020/06/29 Python
css3实现input输入框颜色渐变发光效果代码
2014/04/02 HTML / CSS
一款纯css3实现的动画加载导航
2014/10/08 HTML / CSS
JAVA中的关键字有什么特点
2014/03/07 面试题
酒店实习个人鉴定
2013/12/07 职场文书
鼓励运动员的广播稿
2014/02/08 职场文书
班级道德讲堂实施方案
2014/02/24 职场文书
2015年元旦活动总结
2014/05/09 职场文书
奥巴马获胜演讲稿
2014/05/15 职场文书
镇政府副镇长群众路线专题民主生活会对照检查材料
2014/09/19 职场文书
搞笑的爱情检讨书
2014/10/01 职场文书
党员群众路线学习心得体会
2014/11/04 职场文书
优秀团员个人总结
2015/02/26 职场文书
小学英语教学经验交流材料
2015/11/02 职场文书
《跨越海峡的生命桥》教学反思
2016/02/18 职场文书
GTX1660显卡搭配显示器推荐
2022/04/19 数码科技