深入浅析JavaScript中对事件的三种监听方式


Posted in Javascript onSeptember 29, 2015

事件(Event)是JavaScript应用跳动的心脏,也是把所有东西粘在一起的胶水,当我们与浏览器中Web页面进行某些类型的交互时,事件就发生了。

第一种监听方式,也是最普遍使用的方式,是直接在代码上加载事件,产生效果:

<table>
<tr onmouseover='this.style.backgroundColor="red"' onmouseout='this.style.backgroundColor=""'><td>text1</td><td>text2</td></tr>
<tr onmouseover='this.style.backgroundColor="red"' onmouseout='this.style.backgroundColor=""'><td>text3</td><td>text4</td></tr>
<tr onmouseover='this.style.backgroundColor="red"' onmouseout='this.style.backgroundColor=""'><td>text5</td><td>text5</td></tr>
</table>

第二种监听方式,是使用DOM的方式获取对象,并加载事件:

<table>
<tr><td>text1</td><td>text2</td></tr>
<tr><td>text3</td><td>text4</td></tr>
<tr><td>text5</td><td>text5</td></tr>
</table>
<script>
doms = document.getElementsByTagName('tr');
for(i=0;i<doms.length;i++)
{
  doms[i].onmouseover = function()
  {
    this.style.backgroundColor = "red";
  }
  doms[i].onmouseout = function()
  {
    this.style.backgroundColor = "";
  }
}
</script>

第三种监听方式,是使用标准的addEventListener方式和IE私有的attachEvent方式,因为IE的attachEvent方式在参数传递时的缺陷,这个问题被搞得稍许有些复杂了:

<table>
<tr><td>text1</td><td>text2</td></tr>
<tr><td>text3</td><td>text4</td></tr>
<tr><td>text5</td><td>text5</td></tr>
</table>
<script>
doms = document.getElementsByTagName('tr');
function show_color(where)
{
  this.tagName ? where = this : null
  where.style.backgroundColor = "red";
}
function hide_color(where)
{
  this.tagName ? where = this : null
  where.style.backgroundColor = "";
}
function for_ie(where,how)
{
  return function()
  {
    how(where);
  }  
}
for(i=0;i<doms.length;i++)
{
  try
  {
    doms[i].addEventListener('mouseover',show_color,false);
    doms[i].addEventListener('mouseout',hide_color,false);
  }
  catch(e)
  {
    doms[i].attachEvent('onmouseover',for_ie(doms[i],show_color));
    doms[i].attachEvent('onmouseout',for_ie(doms[i],hide_color));
  }
}
</script>

在绑定多个相同的事件的时候,前两种方法会产生覆盖,而第三中方法则会同时执行多个事件。

Javascript 相关文章推荐
jquery text,radio,checkbox,select操作实现代码
Jul 09 Javascript
使用JS画图之点、线、面
Jan 12 Javascript
mvvm双向绑定机制的原理和实现代码(推荐)
Jun 07 Javascript
JavaScript 中有关数组对象的方法(详解)
Aug 15 Javascript
关于angularJs指令的Scope(作用域)介绍
Oct 25 Javascript
Bootstrap基本布局实现方法详解
Nov 25 Javascript
关于微信上网页图片点击全屏放大效果
Dec 19 Javascript
原生JS中slice()方法和splice()区别
Mar 06 Javascript
详解微信开发中snsapi_base和snsapi_userinfo及静默授权的实现
Mar 11 Javascript
JavaScript+Html5实现按钮复制文字到剪切板功能(手机网页兼容)
Mar 30 Javascript
为什么说JavaScript预解释是一种毫无节操的机制详析
Nov 18 Javascript
JS一分钟在github+Jekyll的博客中添加访问量功能的实现
Apr 03 Javascript
jQuery中的ajax async同步和异步详解
Sep 29 #Javascript
网页从弹窗页面单选框传值至父页面代码分享
Sep 29 #Javascript
pace.js页面加载进度条插件
Sep 29 #Javascript
js强制把网址设为默认首页
Sep 29 #Javascript
jQuery EasyUI Dialog拖不下来如何解决
Sep 28 #Javascript
JQuery实现左右滚动菜单特效
Sep 28 #Javascript
JS动态日期时间的获取方法
Sep 28 #Javascript
You might like
PHP开发框架总结收藏
2008/04/24 PHP
PHP 基本语法格式
2009/12/15 PHP
PHP备份数据库生成SQL文件并下载的函数代码
2012/02/05 PHP
将CMYK颜色值和RGB颜色相互转换的PHP代码
2014/07/28 PHP
PHP Beanstalkd消息队列的安装与使用方法实例详解
2020/02/21 PHP
greybox——不开新窗口看新的网页
2007/02/20 Javascript
JavaScript判断窗口是否最小化的代码(跨浏览器)
2010/08/01 Javascript
JS 自定义带默认值的函数
2011/07/21 Javascript
实现点击列表弹出列表索引的两种方式
2013/03/08 Javascript
js中cookie的添加、取值、删除示例代码
2013/10/21 Javascript
Backbone.js 0.9.2 源码注释中文翻译版
2015/06/25 Javascript
BootStrap下拉菜单和滚动监听插件实现代码
2016/09/26 Javascript
详解Jquery Easyui的验证扩展
2017/01/09 Javascript
AngularJS 实现点击按钮获取验证码功能实例代码
2017/07/13 Javascript
webpack@v4升级踩坑(小结)
2018/10/08 Javascript
如何写好一个vue组件,老夫的一年经验全在这了(推荐)
2019/05/18 Javascript
vue点击按钮动态创建与删除组件功能
2019/12/29 Javascript
[58:32]EG vs Liquid 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
Python中subprocess模块用法实例详解
2015/05/20 Python
在Django框架中编写Contact表单的教程
2015/07/17 Python
Python程序中设置HTTP代理
2016/11/06 Python
python读取二进制mnist实例详解
2017/05/31 Python
Python使用gRPC传输协议教程
2018/10/16 Python
css3截图_动力节点Java学院整理
2017/07/11 HTML / CSS
法国春天百货官网:Printemps.com
2020/06/29 全球购物
九年级家长会邀请函
2014/01/15 职场文书
写自荐信三大法宝
2014/01/24 职场文书
美容院考勤制度
2014/01/30 职场文书
狼和鹿教学反思
2014/02/05 职场文书
马丁路德金演讲稿
2014/05/19 职场文书
协商一致解除劳动合同协议书
2014/09/14 职场文书
会计出纳岗位职责
2015/03/31 职场文书
慈善募捐倡议书
2015/04/27 职场文书
唐山大地震的观后感
2015/06/05 职场文书
2015年主婚人婚礼致辞
2015/07/28 职场文书
使用Oracle跟踪文件的问题详解
2021/06/28 Oracle