详解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代码优化 遍历篇
Nov 01 Javascript
jquery 操作iframe的几种方法总结
Dec 13 Javascript
多个$(document).ready()的执行顺序实例分析
Jul 26 Javascript
初识Node.js
Mar 20 Javascript
使用iojs的jsdom库实现同步系统时间
Apr 20 Javascript
js导出excel文件的简洁方法(推荐)
Nov 02 Javascript
微信小程序 图片加载(本地,网路)实例详解
Mar 10 Javascript
AngularJs定时器$interval 和 $timeout详解
May 25 Javascript
javascript 数据存储的常用函数总结
Jun 01 Javascript
详解Node中导入模块require和import的区别
Aug 11 Javascript
基于vue 添加axios组件,解决post传参数为null的问题
Mar 05 Javascript
vue动态删除从数据库倒入列表的某一条方法
Sep 29 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
IP138 IP地址查询小偷实现代码
2010/02/15 PHP
php递归创建和删除文件夹的代码小结
2012/04/13 PHP
解决Laravel5.2 Auth认证退出失效的问题
2019/10/14 PHP
JavaScript 基础篇之对象、数组使用介绍(三)
2012/04/07 Javascript
SwfUpload在IE10上不出现上传按钮的解决方法
2013/06/25 Javascript
js图片处理示例代码
2014/05/12 Javascript
wap浏览自动跳转到wap页面的js代码
2014/05/17 Javascript
jQuery的:parent选择器定义和用法
2014/07/01 Javascript
Javascript学习笔记之函数篇(六) : 作用域与命名空间
2014/11/23 Javascript
牛叉的Jquery——Jquery与DOM对象的互相转换及DOM的三种操作
2015/10/29 Javascript
Reactjs实现通用分页组件的实例代码
2017/01/19 Javascript
JavaScript实现前端实时搜索功能
2020/03/26 Javascript
详解vue-cli开发环境跨域问题解决方案
2017/06/06 Javascript
改变vue请求过来的数据中的某一项值的方法(详解)
2018/03/08 Javascript
node thread.sleep实现示例
2018/06/20 Javascript
解决betterScroll在vue中存在图片时,出现拉不动的问题
2018/09/27 Javascript
微信小程序实现顶部导航特效
2019/01/28 Javascript
利用JavaScript的Map提升性能的方法详解
2019/08/14 Javascript
JavaScript实现单图片上传并预览功能
2019/09/30 Javascript
基于Vue中使用节流Lodash throttle详解
2019/10/30 Javascript
python2 与python3的print区别小结
2018/01/16 Python
Python编程argparse入门浅析
2018/02/07 Python
解决Pycharm中import时无法识别自己写的程序方法
2018/05/18 Python
django 解决model中类写不到数据库中,数据库无此字段的问题
2020/05/20 Python
实列教程 一款基于jquery和css3的响应式二级导航菜单
2014/11/13 HTML / CSS
美国五金商店:Ace Hardware
2018/03/27 全球购物
创建青年文明号材料
2014/05/09 职场文书
中专毕业生的自荐书
2014/07/01 职场文书
专题组织生活会思想汇报
2014/10/01 职场文书
采购内勤岗位职责
2015/04/13 职场文书
法定代表人免职证明
2015/06/24 职场文书
2016会计专业自荐信范文
2016/01/28 职场文书
职场干货:简历中的自我评价应该这样写!
2019/05/06 职场文书
正能量励志演讲稿三分钟(范文)
2019/07/11 职场文书
创业计划书之牛肉汤快餐店
2019/10/08 职场文书
nginx location 带斜杠【 / 】与不带的区别
2022/04/13 Servers