详解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 相关文章推荐
js的逻辑运算符 ||
May 31 Javascript
js 如何实现对数据库的增删改查
Nov 23 Javascript
js字符串转换成xml对象并使用技巧解读
Apr 18 Javascript
根据表格中的某一列进行排序的javascript代码
Nov 29 Javascript
js判断某个方法是否存在实例代码
Jan 10 Javascript
详解Javascript继承的实现
Mar 25 Javascript
bootstrap table 数据表格行内修改的实现代码
Feb 13 Javascript
Vue.js结合Ueditor富文本编辑器的实例代码
Jul 11 Javascript
fetch 使用及如何接收JS传值
Nov 11 Javascript
微信小程序自定义toast实现方法详解【附demo源码下载】
Nov 28 Javascript
jquery radio 动态控制选中失效问题的解决方法
Feb 28 jQuery
vue把输入框的内容添加到页面的实例讲解
Nov 11 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 5.0对象模型深度探索之类的静态成员
2008/03/27 PHP
PHP 数组入门教程小结
2009/05/20 PHP
PHP 一个随机字符串生成代码
2010/05/26 PHP
php中memcache 基本操作实例
2015/05/17 PHP
四个PHP非常实用的功能
2015/09/29 PHP
php构造方法中析构方法在继承中的表现
2016/04/12 PHP
自制PHP框架之设计模式
2017/05/07 PHP
JavaScript CSS修改学习第三章 修改样式表
2010/02/19 Javascript
关于可运行代码无法正常执行的使用说明
2010/05/13 Javascript
ANT 压缩(去掉空格/注释)JS文件可提高js运行速度
2013/04/15 Javascript
jquery实现的鼠标下拉滚动置顶效果
2014/07/24 Javascript
多个$(document).ready()的执行顺序实例分析
2014/07/26 Javascript
浅谈javascript对象模型和function对象
2014/12/26 Javascript
JavaScript 面向对象与原型
2015/04/10 Javascript
vue2.0使用swiper组件实现轮播效果
2017/11/27 Javascript
浅谈Javascript中的对象和继承
2019/04/19 Javascript
javascript数组的定义及操作实例
2019/11/10 Javascript
解决Python的str强转int时遇到的问题
2018/04/09 Python
基于python3 OpenCV3实现静态图片人脸识别
2018/05/25 Python
django中ORM模型常用的字段的使用方法
2019/03/05 Python
wxPython+Matplotlib绘制折线图表
2019/11/19 Python
pygame实现弹球游戏
2020/04/14 Python
Python读写csv文件流程及异常解决
2020/10/20 Python
python 制作网站筛选工具(附源码)
2021/01/21 Python
CSS中垂直居中的简单实现方法
2015/07/06 HTML / CSS
通过canvas转换颜色为RGBA格式及性能问题的解决
2019/11/22 HTML / CSS
游戏商店:Eneba
2020/04/25 全球购物
自考生自我评价分享
2014/01/18 职场文书
《小蝌蚪找妈妈》教学反思
2014/02/21 职场文书
离婚协议书怎么写2014
2014/09/30 职场文书
交警正风肃纪剖析材料
2014/10/29 职场文书
革命电影观后感
2015/06/18 职场文书
2019年最新借条范本!
2019/07/08 职场文书
古诗之爱国古诗5首
2019/09/20 职场文书
JAVA springCloud项目搭建流程
2022/05/11 Java/Android
windows server2016安装oracle 11g的图文教程
2022/07/15 Servers