详解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 相关文章推荐
用Jquery实现多级下拉框无刷新的联动
Dec 22 Javascript
jQuery EasyUI API 中文文档 - PropertyGrid属性表格
Nov 18 Javascript
javascript 文本框水印/占位符(watermark/placeholder)实现方法
Jan 15 Javascript
ExtJS4 Grid改变单元格背景颜色及Column render学习
Feb 06 Javascript
js 3秒后跳转页面的实现代码
Mar 10 Javascript
js中获取 table节点各tr及td的内容简单实例
Oct 14 Javascript
js实现图片切换(动画版)
Dec 25 Javascript
微信小程序 JS动态修改样式的实现代码
Feb 10 Javascript
你有必要知道的10个JavaScript难点
Jul 25 Javascript
JavaScript生成指定范围的时间列表
Mar 19 Javascript
JavaScript实现的拼图算法分析
Feb 13 Javascript
Openlayers+EasyUI Tree动态实现图层控制
Sep 28 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_Flame(Version:Progress)的原代码
2006/10/09 PHP
深入理解用mysql_fetch_row()以数组的形式返回查询结果
2013/06/05 PHP
php基于闭包实现函数的自调用(递归)实例分析
2016/11/11 PHP
PHPExcel中文帮助手册|PHPExcel使用方法(分享)
2017/06/09 PHP
php实现二叉树中和为某一值的路径方法
2018/10/14 PHP
laravel-admin 中列表筛选方法
2019/10/03 PHP
Use Word to Search for Files
2007/06/15 Javascript
js href的用法
2010/05/13 Javascript
通过JavaScript控制字体大小的代码
2011/10/04 Javascript
js 实现菜单上下显示附效果图
2013/11/21 Javascript
js实现分割上传大文件
2016/03/09 Javascript
js初始化验证实例详解
2016/11/26 Javascript
原生JS发送异步数据请求
2017/06/08 Javascript
微信小程序实现顶部选项卡(swiper)
2020/06/19 Javascript
react-router browserHistory刷新页面404问题解决方法
2017/12/29 Javascript
详解如何在项目中使用jest测试react native组件
2018/02/09 Javascript
js常见遍历操作小结
2019/06/06 Javascript
如何构建一个Vue插件并生成npm包
2020/10/26 Javascript
VUE+Element实现增删改查的示例源码
2020/11/23 Vue.js
Python实现的数据结构与算法之快速排序详解
2015/04/22 Python
python中requests爬去网页内容出现乱码问题解决方法介绍
2017/10/25 Python
Python操作MongoDb数据库流程详解
2020/03/05 Python
详解Python 中的 defaultdict 数据类型
2021/02/22 Python
ebookers英国:隶属全球最大的在线旅游公司Expedia
2017/12/28 全球购物
英国领先的餐饮折扣俱乐部:Gourmet Society
2020/07/26 全球购物
创业计划书——互联网商机
2014/01/12 职场文书
高中数学教学反思
2014/01/30 职场文书
《逃家小兔》教学反思
2014/02/23 职场文书
《胖乎乎的小手》教学反思
2014/02/26 职场文书
环境工程专业自荐信范文
2014/03/18 职场文书
行政专员岗位职责说明书
2014/07/30 职场文书
党的群众路线教育实践活动整改方案
2014/10/28 职场文书
公司总经理岗位职责
2015/04/01 职场文书
房产电话营销开场白
2015/05/29 职场文书
vue二维数组循环嵌套方式 循环数组、循环嵌套数组
2022/04/24 Vue.js
mysqldump进行数据备份详解
2022/07/15 MySQL