深入浅析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 相关文章推荐
js的event详解。
Sep 06 Javascript
JQuery 浮动导航栏实现代码
Aug 27 Javascript
60行js代码实现俄罗斯方块
Mar 31 Javascript
jQuery的css() 方法使用指南
May 03 Javascript
coffeescript使用的方式汇总
Aug 05 Javascript
JavaScript ParseFloat()方法
Dec 18 Javascript
JavaScript实现输入框(密码框)出现提示语
Jan 12 Javascript
jQuery头像裁剪工具jcrop用法实例(附演示与demo源码下载)
Jan 22 Javascript
javascript动态获取登录时间和在线时长
Feb 25 Javascript
JS当前页面登录注册框,固定DIV,底层阴影的实例代码
Sep 29 Javascript
Node.js调用fs.renameSync报错(Error: EXDEV, cross-device link not permitted)
Dec 27 Javascript
15分钟上手vue3.0(小结)
May 20 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仿ZOL分页类代码
2008/10/02 PHP
Codeigniter发送邮件的方法
2015/03/19 PHP
Linux php 中文乱码的快速解决方法
2016/05/13 PHP
PHP版微信小店接口开发实例
2016/11/12 PHP
js获取height和width的方法说明
2013/01/06 Javascript
JS批量修改PS中图层名称的方法
2014/01/26 Javascript
javascript修改IMG标签的src问题
2014/03/28 Javascript
用html5 js实现点击一个按钮达到浏览器全屏效果
2014/05/28 Javascript
JavaScript实现DIV层拖动及动态增加新层的方法
2015/05/12 Javascript
jQuery模仿单选按钮选中效果
2016/06/24 Javascript
JavaScript编程中实现对象封装特性的实例讲解
2016/06/24 Javascript
select隐藏选中值对应的id,显示其它id的简单实现方法
2016/08/25 Javascript
Javascript 判断两个IP是否在同一网段实例代码
2016/11/28 Javascript
微信小程序 解析网页内容详解及实例
2017/02/22 Javascript
将angular-ui的分页组件封装成指令的方法详解
2017/05/10 Javascript
详解Web使用webpack构建前端项目
2017/09/23 Javascript
Node.js npm命令运行node.js脚本的方法
2018/10/10 Javascript
vue19 组建 Vue.extend component、组件模版、动态组件 的实例代码
2019/04/04 Javascript
JS使用iView的Dropdown实现一个右键菜单
2019/05/06 Javascript
JavaScript组合设计模式--改进引入案例分析
2020/05/23 Javascript
[04:40]2016个国际邀请赛中国区预选赛场地——华西村观战指南
2016/06/25 DOTA
一个基于flask的web应用诞生(1)
2017/04/11 Python
Python 使用matplotlib模块模拟掷骰子
2019/08/08 Python
Python 实现顺序高斯消元法示例
2019/12/09 Python
Python Opencv图像处理基本操作代码详解
2020/08/31 Python
python 判断一组数据是否符合正态分布
2020/09/23 Python
Html5内唤醒百度、高德APP的实现示例
2019/05/20 HTML / CSS
叙述DBMS对数据控制功能有哪些
2016/06/12 面试题
公司综合部的成员自我评价分享
2013/11/05 职场文书
销售辞职报告范文
2014/01/12 职场文书
绿色城市实施方案
2014/03/19 职场文书
语文高效课堂实施方案
2014/05/03 职场文书
质量整改报告范文
2014/11/08 职场文书
2014年优秀班主任工作总结
2014/12/16 职场文书
优秀团员事迹材料
2014/12/25 职场文书
Redis 哨兵集群的实现
2021/06/18 Redis