详解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 相关文章推荐
JavaScript与函数式编程解释
Apr 27 Javascript
js网页版计算器的简单实现
Jul 02 Javascript
JS根据变量保存方法名并执行方法示例
Apr 04 Javascript
jquery操作checkbox示例分享
Jul 21 Javascript
javascript实现控制文字大中小显示
Apr 28 Javascript
Vue.JS入门教程之自定义指令
Dec 08 Javascript
JavaScript实现的select点菜功能示例
Jan 16 Javascript
jquery.rotate.js实现可选抽奖次数和中奖内容的转盘抽奖代码
Aug 23 jQuery
微信小程序实现折叠与展开文章功能
Jun 12 Javascript
Vue-router 中hash模式和history模式的区别
Jul 24 Javascript
小程序实现列表删除功能
Oct 30 Javascript
vue实现抽屉弹窗效果
Nov 15 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
1 Tube Radio
2021/03/02 无线电
PHP脚本的10个技巧(1)
2006/10/09 PHP
PHP与MongoDB简介|安全|M+PHP应用实例详解
2013/06/17 PHP
PHP中static关键字以及与self关键字的区别
2015/07/01 PHP
php实现的SSO单点登录系统接入功能示例分析
2016/10/12 PHP
PHP文件上传处理案例分析
2016/10/15 PHP
解决form中action属性后面?传递参数 获取不到的问题
2017/07/21 PHP
JS获取scrollHeight问题想到的标准问题
2007/05/27 Javascript
创建一个复制UBB软件信息的链接或按钮的js代码
2008/01/06 Javascript
js字符串截取函数substr substring slice使用对比
2013/11/27 Javascript
JavaScript实现字符串与日期的互相转换及日期的格式化
2016/03/07 Javascript
angular中实现li或者某个元素点击变色的两种方法
2017/07/27 Javascript
vue使用Google地图的实现示例代码
2018/12/19 Javascript
Vue 组件修改根实例的数据的方法
2019/04/02 Javascript
JS回调函数原理与用法详解【附PHP回调函数】
2019/07/20 Javascript
webpack+express实现文件精确缓存的示例代码
2020/06/11 Javascript
python二叉树的实现实例
2013/11/21 Python
Python3 伪装浏览器的方法示例
2017/11/23 Python
Python学习之Anaconda的使用与配置方法
2018/01/04 Python
python psutil库安装教程
2018/03/19 Python
python和shell监控linux服务器的详细代码
2018/06/22 Python
python 地图经纬度转换、纠偏的实例代码
2018/08/06 Python
使用PyQt的QLabel组件实现选定目标框功能的方法示例
2020/05/19 Python
python实现图片,视频人脸识别(dlib版)
2020/11/18 Python
用canvas做一个DVD待机动画的实现代码
2019/04/12 HTML / CSS
three.js模拟实现太阳系行星体系功能
2019/09/03 HTML / CSS
New Balance比利时官方网站:购买鞋子和服装
2021/01/15 全球购物
JSF如何进行表格处理及取值
2012/08/06 面试题
C语言笔试集
2012/07/24 面试题
Python是如何进行类型转换的
2013/06/09 面试题
服装设计行业个人的自我评价
2013/12/20 职场文书
管理心得体会
2013/12/28 职场文书
绩效管理实施方案
2014/03/19 职场文书
城市规划应届生推荐信
2014/09/08 职场文书
逃出克隆岛观后感
2015/06/09 职场文书
2019同学聚会主持词
2019/05/06 职场文书