深入浅析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 DataSet数据源处理代码
Mar 29 Javascript
ajax 同步请求和异步请求的差异分析
Jul 04 Javascript
js图片滚动效果时间可随意设定当鼠标移上去时停止
Jun 26 Javascript
jquery实现顶部向右伸缩的导航区域代码
Sep 02 Javascript
JavaScript操作 url 中 search 部分方法函数
Jun 15 Javascript
Vue.js每天必学之组件与组件间的通信
Sep 08 Javascript
JavaScript中常用的验证reg
Oct 13 Javascript
vue仿淘宝订单状态的tab切换效果
Jun 23 Javascript
vue+node+webpack环境搭建教程
Nov 05 Javascript
微信小程序防止多次点击跳转(函数节流)
Sep 19 Javascript
使用 UniApp 实现小程序的微信登录功能
Jun 09 Javascript
vue props 一次传多个值实例
Jul 22 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
PHP5与MySQL数据库操作常用代码 收集
2010/03/21 PHP
php 中文字符入库或显示乱码问题的解决方法
2010/04/12 PHP
Codeigniter中禁止A Database Error Occurred错误提示的方法
2014/06/12 PHP
php实现简易计算器
2020/08/28 PHP
PHPStorm2020.1永久激活及下载更新至2020(推荐)
2020/09/25 PHP
JQuery AJAX实现目录浏览与编辑的代码
2008/10/21 Javascript
javascript 在网页中的运用(asp.net)
2009/11/23 Javascript
javascript页面渲染速度测试脚本分享
2014/04/15 Javascript
js代码验证手机号码和电话号码是否合法
2015/07/30 Javascript
深入浅析JavaScript系列(13):This? Yes,this!
2016/01/05 Javascript
JavaScript 消息框效果【实现代码】
2016/04/27 Javascript
Markdown与Bootstrap相结合实现图片自适应属性
2016/05/04 Javascript
浅谈String.valueOf()方法的使用
2016/06/06 Javascript
微信小程序 获取当前地理位置和经纬度实例代码
2016/12/05 Javascript
JS实现类似百叶窗下拉菜单效果
2016/12/30 Javascript
Node.js+jade+mongodb+mongoose实现爬虫分离入库与生成静态文件的方法
2017/09/20 Javascript
Vue.js中的computed工作原理
2018/03/22 Javascript
layui动态渲染生成select的option值方法
2019/09/23 Javascript
微信小程序网络请求实现过程解析
2019/11/06 Javascript
jQuery 动画与停止动画效果实例详解
2020/05/19 jQuery
使用vue编写h5公众号跳转小程序的实现代码
2020/11/27 Vue.js
python安装mysql-python简明笔记(ubuntu环境)
2016/06/25 Python
Python调用C++程序的方法详解
2017/01/24 Python
Python中Selenium模拟JQuery滑动解锁实例
2017/07/26 Python
linux环境下的python安装过程图解(含setuptools)
2017/11/22 Python
python编写弹球游戏的实现代码
2018/03/12 Python
python对视频画框标记后保存的方法
2018/12/07 Python
Python生成验证码、计算具体日期是一年中的第几天实例代码详解
2019/10/16 Python
详解pandas apply 并行处理的几种方法
2021/02/24 Python
介绍一下linux文件系统分配策略
2013/02/25 面试题
编辑找工作求职信范文
2013/12/16 职场文书
财务简历的自我评价
2014/03/05 职场文书
超市商业计划书
2014/05/04 职场文书
班级团队活动方案
2014/08/14 职场文书
三八妇女节主持词
2015/07/04 职场文书
redis客户端实现高可用读写分离的方式详解
2021/07/04 Redis