详解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 09 Javascript
JS设置获取cookies的方法
Jan 26 Javascript
jQuery实现的超链接提示效果示例【附demo源码下载】
Sep 09 Javascript
js从输入框读取内容,比较两个数字的大小方法
Mar 13 Javascript
angularjs中使用ng-bind-html和ng-include的实例
Apr 28 Javascript
BootStrap 表单控件之单选按钮水平排列
May 23 Javascript
vue组件 $children,$refs,$parent的使用详解
Jul 31 Javascript
简单快速的实现js计算器功能
Aug 17 Javascript
使用jQuery实现页面定时弹出广告效果
Aug 24 jQuery
使用JavaScript实现点击循环切换图片效果
Sep 03 Javascript
Vue实现动态创建和删除数据的方法
Mar 17 Javascript
vue移动端html5页面根据屏幕适配的四种解决方法
Oct 19 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 制作简单的留言本
2009/11/02 PHP
获取远程文件大小的php函数
2010/01/11 PHP
yii2带搜索功能的下拉框实例详解
2016/05/12 PHP
Zend Framework常用校验器详解
2016/12/09 PHP
php中文乱码问题的终极解决方案汇总
2017/08/01 PHP
php 多继承的几种常见实现方法示例
2019/11/18 PHP
js弹窗代码 可以指定弹出间隔
2010/07/03 Javascript
JQuery解析HTML、JSON和XML实例详解
2014/03/29 Javascript
将字符串中由空格隔开的每个单词首字母大写
2014/04/06 Javascript
代码获取历史上的今天发生的事
2014/04/11 Javascript
js换图片效果可进行定时操作
2014/06/09 Javascript
jquery实现侧边弹出的垂直导航
2014/12/09 Javascript
js类式继承与原型式继承详解
2016/04/07 Javascript
简单实现node.js图片上传
2016/12/18 Javascript
浅谈JavaScript的计时器对象
2016/12/26 Javascript
js+div+css下拉导航菜单完整代码分享
2016/12/28 Javascript
jQuery Validate 数组 全部验证问题
2017/01/12 Javascript
基于Particles.js制作超炫粒子动态背景效果(仿知乎)
2017/09/13 Javascript
说说node中的可读流和可写流的区别
2018/06/01 Javascript
vue路由中前进后退的一些事儿
2019/05/18 Javascript
图解NodeJS实现登录注册功能
2019/09/16 NodeJs
javascript头像上传代码实例
2019/09/28 Javascript
p5.js实现简单货车运动动画
2019/10/23 Javascript
vue实现两个区域滚动条同步滚动
2020/12/13 Vue.js
[53:49]LGD vs Fnatic 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
[50:38]DOTA2-DPC中国联赛 正赛 Phoenix vs CDEC BO3 第二场 3月7日
2021/03/11 DOTA
基于python实现简单日历
2018/07/28 Python
Python基础之文件读取的讲解
2019/02/16 Python
Python3内置模块pprint让打印比print更美观详解
2019/06/02 Python
使用python telnetlib批量备份交换机配置的方法
2019/07/25 Python
用Python徒手撸一个股票回测框架搭建【推荐】
2019/08/05 Python
Brydge英国:适用于Apple iPad和Microsoft Surface Pro的蓝牙键盘
2019/05/16 全球购物
什么是接口(Interface)?
2013/02/01 面试题
先进基层党组织主要事迹材料
2015/11/03 职场文书
Vue-Element-Admin集成自己的接口实现登录跳转
2021/06/23 Vue.js
Python实现Matplotlib,Seaborn动态数据图
2022/05/06 Python