详解javascript事件绑定使用方法


Posted in Javascript onOctober 20, 2016

由于html是从上至下加载的,通常我们如果在head部分引入javascript文件,那么我们都会在javascript的开头添加window.onload事件,防止在文档问加载完成时进行DOM操作所出现的错误。如果有多个javascript文件,那么极有可能出现多个window.onload事件,但是最后起作用的只有一个,这时候就需要使用事件绑定来解决这个问题了。

IE方式
attachEvent(事件名称, 函数),绑定事件处理函数
detachEvent(事件名称, 函数),解除绑定

DOM方式
addEventListener(事件名称,函数, 捕获)
removeEventListener(事件名称, 函数, 捕获)

<!DOCTYPE HTML> 
<html> 
<head> 
<meta charset="utf-8"> 
<title>无标题文档</title> 
<script> 
window.onload=function () 
{ 
  var oBtn=document.getElementById('btn1'); 
  oBtn.onclick=function () 
  { 
    alert('a'); 
  }; 
   
  oBtn.onclick=function () 
  { 
    alert('b'); 
  }; 
}; 
</script> 
</head> 
<body> 
<input id="btn1" type="button" value="按钮" /> 
</body> 
</html>

这段代码,运行结果是弹出b,因为有两个oBtn的点击事件,但是只执行了最后一个,这时候就体现出事件绑定的重要性了。

<!DOCTYPE HTML> 
<html> 
<head> 
<meta charset="utf-8"> 
<title>无标题文档</title> 
<script> 
window.onload=function () 
{ 
  var oBtn=document.getElementById('btn1'); 
  //IE浏览器 
  if(oBtn.attachEvent) 
  { 
    oBtn.attachEvent('onclick', function () 
    { 
      alert('a'); 
    }); 
    oBtn.attachEvent('onclick', function () 
    { 
      alert('b'); 
    }); 
  } 
  //其他浏览器 
  else 
  { 
    oBtn.addEventListener('click', function () 
    { 
      alert('a'); 
    }, false); 
    oBtn.addEventListener('click', function () 
    { 
      alert('b'); 
    }, false); 
  } 
   
}; 
</script> 
</head> 
<body> 
<input id="btn1" type="button" value="按钮" /> 
</body> 
</html>

当你使用事件绑定的时候,那么两次点击事件都会执行,只是执行顺序在不同浏览器是不同的。在IE中是自下而上执行,而在其他浏览器中是自上而下,不过由于alert的特殊性我们可以看出差别,其他语句基本等同于没有差别,但是在对于一些对时间要求严格是事件的使用时还是需要注意的,比如之前有一篇文章图片轮播中的setInterval对时间的细微的差别最后导致滚动混乱。 基于原生javascript的图片轮播domo

最后将我们的代码整理成函数,便于之后的使用

function myAddEvent(obj, ev, fn) 
{ 
  if(obj.attachEvent) 
  { 
    obj.attachEvent('on'+ev, fn); 
  } 
  else 
  { 
    obj.addEventListener(ev, fn, false); 
  } 
}

这时候如果需要使用多个window.onload事件其实就和使用多个oBtn.onclick事件差不多了。如下调用函数即可。

myAddEvent(window,'load',function () 
{ 
  alert('a'); 
}); 
myAddEvent(window,'load',function () 
{ 
  alert('b');

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
ExtJs3.0中Store添加 baseParams 的Bug
Mar 10 Javascript
jQuery初学:find()方法及children方法的区别分析
Jan 31 Javascript
浅谈JavaScript正则表达式分组匹配
Apr 10 Javascript
js实现页面跳转的五种方法推荐
Mar 10 Javascript
基于Bootstrap table组件实现多层表头的实例代码
Sep 07 Javascript
vue利用better-scroll实现轮播图与页面滚动详解
Oct 20 Javascript
Javascript将图片的绝对路径转换为base64编码的方法
Jan 11 Javascript
深入浅析Vue中的slots/scoped slots
Apr 03 Javascript
JavaScript数据结构与算法之检索算法实例分析【顺序查找、最大最小值、自组织查询】
Feb 22 Javascript
详解小程序之简单登录注册表单验证
May 13 Javascript
vue配置文件实现代理v2版本的方法
Jun 21 Javascript
教你30秒发布一个TypeScript包到NPM的方法步骤
Jul 22 Javascript
angular源码学习第一篇 setupModuleLoader方法
Oct 20 #Javascript
jQuery动态创建元素以及追加节点的实现方法
Oct 20 #Javascript
JS中动态创建元素的三种方法总结(推荐)
Oct 20 #Javascript
yarn与npm的命令行小结
Oct 20 #Javascript
Bootstrap 网站实例之单页营销网站
Oct 20 #Javascript
Javascript的动态增加类的实现方法
Oct 20 #Javascript
关于RequireJS的简单介绍即使用方法
Oct 20 #Javascript
You might like
PHP获取搜索引擎关键字来源的函数(支持百度和谷歌等搜索引擎)
2012/10/03 PHP
PHP include任意文件或URL介绍
2014/04/29 PHP
win7安装php框架Yii的方法
2016/01/25 PHP
php根据数据id自动生成编号的实现方法
2016/10/16 PHP
php集成开发环境详解
2019/09/24 PHP
Laravel 框架基于自带的用户系统实现登录注册及错误处理功能分析
2020/04/14 PHP
js实现点击注册按钮开始读秒倒计时的小例子
2013/05/11 Javascript
javascript实现判断鼠标的状态
2015/07/10 Javascript
Node.js+Express配置入门教程详解
2016/05/19 Javascript
Javascript中关于Array.filter()的妙用详解
2016/12/04 Javascript
vue bus全局事件中心简单Demo详解
2018/02/26 Javascript
在react-router4中进行代码拆分的方法(基于webpack)
2018/03/08 Javascript
vue3.0 CLI - 2.4 - 新组件 Forms.vue 中学习表单
2018/09/14 Javascript
小程序分享模块超级详解(推荐)
2019/04/10 Javascript
JavaScript函数式编程(Functional Programming)声明式与命令式实例分析
2019/05/21 Javascript
浅谈Three.js截图并下载的大坑
2019/11/01 Javascript
JavaScript实现Tab标签页切换的最简便方式(4种)
2020/06/28 Javascript
详解JavaScript原型与原型链
2020/11/16 Javascript
Python多进程通信Queue、Pipe、Value、Array实例
2014/11/21 Python
如何用Python实现简单的Markdown转换器
2018/07/16 Python
详解Python静态网页爬取获取高清壁纸
2019/04/23 Python
解决pycharm中opencv-python导入cv2后无法自动补全的问题(不用作任何文件上的修改)
2020/03/05 Python
Python requests接口测试实现代码
2020/09/08 Python
Django搭建项目实战与避坑细节详解
2020/12/06 Python
Python中读取文件名中的数字的实例详解
2020/12/25 Python
CSS3盒子模型详解
2013/04/24 HTML / CSS
CSS3实现渐变背景兼容问题
2020/05/06 HTML / CSS
HTML5 语义化结构化规范化
2008/10/17 HTML / CSS
美国蔬菜和植物种子公司:Burpee
2017/02/01 全球购物
蛋糕店的商业计划书范文
2014/01/27 职场文书
财务内勤岗位职责
2014/04/17 职场文书
机关党总支领导班子整改方案
2014/09/20 职场文书
2016春节慰问信范文
2015/03/25 职场文书
2015年银行个人工作总结
2015/05/14 职场文书
《伯牙绝弦》教学反思
2016/02/16 职场文书
vue使用Google Recaptcha验证的实现示例
2021/08/23 Vue.js