深入浅析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压缩利器
Feb 20 Javascript
模拟用户操作Input元素,不会触发相应事件
May 11 Javascript
jQuery获取样式中的背景颜色属性值/颜色值
Dec 17 Javascript
JavaScript调用客户端Java程序的方法
Jul 27 Javascript
JavaScript计算某一天是星期几的方法
Aug 05 Javascript
JavaScript tab选项卡插件实例代码
Feb 23 Javascript
js实现键盘自动打字效果
Dec 23 Javascript
你应该知道的几类npm依赖包管理详解
Oct 06 Javascript
解决微信小程序中转换时间格式IOS不兼容的问题
Feb 15 Javascript
浅谈发布订阅模式与观察者模式
Apr 09 Javascript
layui表格设计以及数据初始化详解
Oct 26 Javascript
javascript中call,apply,bind的区别详解
Dec 11 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中ltrim()函数的用法与实例讲解
2019/03/28 PHP
php版本CKEditor 4和CKFinder安装及配置方法图文教程
2019/06/05 PHP
动态调用css文件——jquery的应用
2007/02/20 Javascript
javascript 兼容鼠标滚轮事件
2009/04/07 Javascript
封装html的select标签的js操作实例
2013/07/02 Javascript
CheckBoxList多选样式jquery、C#获取选择项
2013/09/06 Javascript
扩展IE中一些不兼容的方法如contains、startWith等等
2014/01/09 Javascript
jQuery基础语法实例入门
2014/12/23 Javascript
深入理解JavaScript的React框架的原理
2015/07/02 Javascript
jQuery增加自定义函数的方法
2015/07/18 Javascript
jQuery的position()方法详解
2015/07/19 Javascript
Bootstrap CSS组件之按钮下拉菜单
2016/12/17 Javascript
Node.js 使用递归实现遍历文件夹中所有文件
2017/09/18 Javascript
Js面试算法详解
2018/04/08 Javascript
详解如何使用webpack打包JS
2018/06/21 Javascript
JavaScript实现动态添加、移除元素或属性的方法分析
2019/01/03 Javascript
JQueryDOM之样式操作
2019/03/27 jQuery
微信小程序之数据绑定原理解析
2019/08/14 Javascript
js中!和!!的区别与用法
2020/05/09 Javascript
vue中v-model对select的绑定操作
2020/08/31 Javascript
python求pi的方法
2014/10/08 Python
基于python的Tkinter实现一个简易计算器
2015/12/31 Python
Python中list初始化方法示例
2016/09/18 Python
使用Matplotlib 绘制精美的数学图形例子
2019/12/13 Python
用python监控服务器的cpu,磁盘空间,内存,超过邮件报警
2021/01/29 Python
python 实现图片裁剪小工具
2021/02/02 Python
飞利浦法国官网:Philips法国
2019/07/10 全球购物
JRE、JDK、JVM之间的关系怎样
2012/05/16 面试题
仓管员岗位职责范文
2013/11/08 职场文书
大学军训感想
2014/02/12 职场文书
法制报告会主持词
2014/04/02 职场文书
2015社区精神文明建设工作总结
2015/04/21 职场文书
2015年行政人事工作总结
2015/05/21 职场文书
中秋联欢会主持词
2015/07/04 职场文书
html5调用摄像头实例代码
2021/06/28 HTML / CSS
vscode远程免密登入Linux服务器的配置方法
2022/06/28 Servers