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 相关文章推荐
php图像生成函数之间的区别分析
Dec 06 Javascript
javascript封装 Cookie 应用接口
Aug 07 Javascript
使用OpenLayers3 添加地图鼠标右键菜单
Dec 29 Javascript
jQuery获取单击节点对象的方法
Jun 02 Javascript
mvc 、bootstrap 结合分布式图简单实现分页
Oct 10 Javascript
Vue监听数据对象变化源码
Mar 09 Javascript
JS中Object对象的原型概念基础
Jan 29 Javascript
Koa日志中间件封装开发详解
Mar 09 Javascript
JavaScript实现字符串与HTML格式相互转换
Mar 17 Javascript
详解webpack-dev-middleware 源码解读
Mar 23 Javascript
浅析VUE防抖与节流
Nov 24 Vue.js
vue本地构建热更新卡顿的问题“75 advanced module optimization”完美解决方案
Aug 05 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
php读取二进制流(C语言结构体struct数据文件)的深入解析
2013/06/13 PHP
一张表搞清楚php is_null、empty、isset的区别
2015/07/07 PHP
JavaScript与HTML结合的基本使用方法整理
2015/10/12 PHP
smarty高级特性之对象的使用方法
2015/12/25 PHP
给WordPress的编辑后台添加提示框的代码实例分享
2015/12/25 PHP
Symfony学习十分钟入门经典教程
2016/02/03 PHP
浅析Yii2缓存的使用
2016/05/10 PHP
PHP使用SWOOLE扩展实现定时同步 MySQL 数据
2017/04/09 PHP
PHP+iframe模拟Ajax上传文件功能示例
2019/07/02 PHP
jQuery ui 1.7更新小结
2009/08/15 Javascript
基于jQuery的图片不完全按比例自动缩小
2014/07/11 Javascript
js的toUpperCase方法用法实例
2015/01/27 Javascript
JavaScript实现同一页面内两个表单互相传值的方法
2015/08/12 Javascript
JS实现完全语义化的网页选项卡效果代码
2015/09/15 Javascript
jquery.validate表单验证插件使用详解
2017/06/21 jQuery
Ionic3实现图片瀑布流布局
2017/08/09 Javascript
AngularJS实现表单验证功能详解
2017/10/12 Javascript
浅谈Vue-cli单文件组件引入less,sass,css样式的不同方法
2018/03/13 Javascript
Vue中使用Sortable的示例代码
2018/04/07 Javascript
Layui给数据表格动态添加一行并跳转到添加行所在页的方法
2018/08/20 Javascript
基于JavaScript实现留言板功能
2020/03/16 Javascript
jQuery实现中奖播报功能(让文本滚动起来) 简单设置数值即可
2020/03/20 jQuery
[13:38]2015国际邀请赛中国战队出征仪式
2015/05/29 DOTA
[01:05]DOTA2完美大师赛趣味视频之选手教你打职业
2017/11/23 DOTA
Python中optparser库用法实例详解
2018/01/26 Python
解决.ui文件生成的.py文件运行不出现界面的方法
2019/06/19 Python
Python爬虫JSON及JSONPath运行原理详解
2020/06/04 Python
Python eval函数介绍及用法
2020/11/09 Python
Pandora德国官网:购买潘多拉手链、戒指、项链和耳环
2020/02/20 全球购物
青年教师典范事迹材料
2014/01/31 职场文书
医院学雷锋活动策划方案
2014/02/15 职场文书
销售人员职业生涯规划范文
2014/03/01 职场文书
《沙漠中的绿洲》教学反思
2014/04/24 职场文书
红色经典观后感
2015/06/18 职场文书
Django一小时写出账号密码管理系统
2021/04/29 Python
用React Native制作一个简单的游戏引擎
2021/05/27 Javascript