详解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 select操作控制方法小结
May 26 Javascript
jQuery实现输入框下拉列表树插件特效代码分享
Aug 27 Javascript
Bootstrap编写导航栏和登陆框
May 30 Javascript
有关jQuery中parent()和siblings()的小问题
Jun 01 Javascript
BootStrap框架中的data-[ ]自定义属性理解(推荐)
Feb 14 Javascript
vue-resource 拦截器使用详解
Feb 21 Javascript
js CSS3实现卡牌旋转切换效果
Jul 04 Javascript
js+canvas实现验证码功能
Sep 21 Javascript
详解使用mpvue开发github小程序总结
Jul 25 Javascript
angularJs自定义过滤器实现手机号信息隐藏的方法
Oct 08 Javascript
浅入深出Vue之自动化路由
Aug 06 Javascript
使用typescript改造koa开发框架的实现
Feb 04 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+mysql来做一个功能强大的在线计算器
2010/10/12 PHP
php笔记之:有规律大文件的读取与写入的分析
2013/04/26 PHP
jquery中的mouseleave和mouseout的区别 模仿下拉框效果
2012/02/07 Javascript
Jqgrid表格随窗口大小改变而改变的简单实例
2013/12/28 Javascript
JavaScript中的数组操作介绍
2014/12/30 Javascript
javascript实现链接单选效果的方法
2015/05/13 Javascript
基于jQuery全屏焦点图左右切换插件responsiveslides
2015/09/07 Javascript
jQuery进行组件开发完整实例
2015/12/15 Javascript
ES6新特性之Symbol类型用法分析
2017/03/31 Javascript
get  post jsonp三种数据交互形式实例详解
2017/08/25 Javascript
JS装饰器函数用法总结
2018/04/21 Javascript
详解vue服务端渲染浏览器端缓存(keep-alive)
2018/10/12 Javascript
es6 filter() 数组过滤方法总结
2019/04/03 Javascript
原生JS实现天气预报
2020/06/16 Javascript
JS代码简洁方式之函数方法详解
2020/07/28 Javascript
selenium 反爬虫之跳过淘宝滑块验证功能的实现代码
2020/08/27 Javascript
不依任何赖第三方,单纯用vue实现Tree 树形控件的案例
2020/09/21 Javascript
基于react项目打包css引用路径错误解决方案
2020/10/28 Javascript
在Mac OS系统上安装Python的Pillow库的教程
2015/11/20 Python
python的set处理二维数组转一维数组的方法示例
2019/05/31 Python
opencv python Canny边缘提取实现过程解析
2020/02/03 Python
python使用梯度下降和牛顿法寻找Rosenbrock函数最小值实例
2020/04/02 Python
keras绘制acc和loss曲线图实例
2020/06/15 Python
python 基于卡方值分箱算法的实现示例
2020/07/17 Python
CSS3实现div从下往上滑入滑出效果示例
2020/04/28 HTML / CSS
法国时尚品牌乐都特瑞士站:La Redoute瑞士
2016/09/05 全球购物
意大利高端时尚买手店:Stefania Mode
2018/03/01 全球购物
IMPORT的选项IGNORE有什么作用?缺省是什么设置?
2015/09/17 面试题
计算机应用专业毕业生求职信
2013/10/24 职场文书
小学毕业寄语大全
2014/04/03 职场文书
中餐厅经理岗位职责
2014/04/11 职场文书
《厄运打不垮的信念》教学反思
2014/04/13 职场文书
2015年母亲节寄语
2015/03/23 职场文书
实习单位意见
2015/06/04 职场文书
感恩教师节主题班会
2015/08/12 职场文书
Win10/Win11 任务栏替换成经典样式
2022/04/19 数码科技