详解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 相关文章推荐
网页和浏览器兼容性问题汇总(draft1)
Jun 01 Javascript
jquery下操作HTML控件的实现代码
Jan 12 Javascript
javascript淡入淡出效果的实现思路
Mar 31 Javascript
关于div自适应高度/左右高度自适应一致的js代码
Mar 22 Javascript
javascript显示中文日期的方法
Jun 18 Javascript
js数组常见操作及数组与字符串相互转化实例详解
Nov 10 Javascript
jquery利用拖拽方式在图片上添加热链接
Nov 24 Javascript
vue组件中使用props传递数据的实例详解
Apr 08 Javascript
详解Vue源码中一些util函数
Apr 24 Javascript
jquery实现有过渡效果的tab切换
Jul 17 jQuery
JavaScript实现烟花绽放动画效果
Aug 04 Javascript
理解JavaScript中的Proxy 与 Reflection API
Sep 21 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
实现了一个PHP5的getter/setter基类的代码
2007/02/25 PHP
PHP CodeIgniter框架的工作原理研究
2015/03/30 PHP
PHP实现一个限制实例化次数的类示例
2019/09/16 PHP
JavaScript 闭包深入理解(closure)
2009/05/27 Javascript
JavaScript设置IFrame高度自适应(兼容各主流浏览器)
2013/06/05 Javascript
Area 区域实现post提交数据的js写法
2014/04/22 Javascript
JS实现Fisheye效果动感放大菜单代码
2015/10/21 Javascript
javascript实现input file上传图片预览效果
2015/12/31 Javascript
IE和Firefox之间在JavaScript语法上的差异
2016/04/22 Javascript
AngularJs Modules详解及示例代码
2016/09/01 Javascript
Vue 过渡(动画)transition组件案例详解
2017/01/22 Javascript
nodejs基础知识
2017/02/03 NodeJs
jsonp跨域请求详解
2017/07/13 Javascript
js图片轮播插件的封装
2017/07/21 Javascript
bootstrap table服务端实现分页效果
2017/08/10 Javascript
二维码图片生成器QRCode.js简单介绍
2017/08/18 Javascript
vue.js  父向子组件传参的实例代码
2017/10/29 Javascript
Vue.use源码学习小结
2018/06/20 Javascript
JavaScript设计模式之工厂模式简单实例教程
2018/07/03 Javascript
使用element-ui的el-menu导航选中后刷新页面保持当前选中状态
2019/07/19 Javascript
Node.js之删除文件夹(含递归删除)代码实例
2019/09/09 Javascript
vue项目中锚点定位替代方式
2019/11/13 Javascript
vue子组件改变父组件传递的prop值通过sync实现数据双向绑定(DEMO)
2020/02/01 Javascript
详解JavaScript的this指向和绑定
2020/09/08 Javascript
[53:52]EG vs VGJ.T 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
python SocketServer源码深入解读
2019/09/17 Python
python的命名规则知识点总结
2019/10/04 Python
python 动态调用函数实例解析
2019/10/21 Python
Python txt文件如何转换成字典
2020/11/03 Python
html5与css3小应用
2013/04/03 HTML / CSS
日本最新流行服饰网购:Nissen
2016/07/24 全球购物
点菜员岗位职责范本
2014/02/14 职场文书
交通事故私了协议书
2014/04/16 职场文书
个人求职信范文
2014/05/24 职场文书
银行招聘自荐信
2015/03/06 职场文书
JavaScript分页组件使用方法详解
2021/07/26 Javascript