深入浅析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随笔(js图片切换效果)
Jul 31 Javascript
javascript中的void运算符语法及使用介绍
Mar 10 Javascript
JS删除数组元素的函数介绍
Mar 27 Javascript
使用JS读秒使用示例
Sep 21 Javascript
jQuery插件MixItUp实现动画过滤和排序
Apr 12 Javascript
javascript实现table选中的行以指定颜色高亮显示的方法
May 13 Javascript
你所不了解的javascript操作DOM的细节知识点(一)
Jun 17 Javascript
javascript生成不重复的随机数
Jul 17 Javascript
jQuery表单设置值的方法
Jun 30 jQuery
详解ES6之用let声明变量以及let loop机制
Jul 15 Javascript
vue实现瀑布流组件滑动加载更多
Mar 10 Javascript
js实现简单的无缝轮播效果
Sep 05 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个人网站架设连环讲(一)
2006/10/09 PHP
php单例模式实现(对象只被创建一次)
2012/12/05 PHP
PHP循环遍历数组的3种方法list()、each()和while总结
2014/11/19 PHP
php连接MSsql server的五种方法总结
2018/03/04 PHP
PHP实现微信对账单处理
2018/10/01 PHP
PHP实现Snowflake生成分布式唯一ID的方法示例
2020/08/30 PHP
jquery validator 插件增加日期比较方法
2010/02/21 Javascript
js读写cookie实现一个底部广告浮层效果的两种方法
2013/12/29 Javascript
详解JavaScript异步编程中jQuery的promise对象的作用
2016/05/03 Javascript
PHP捕捉异常中断的方法
2016/10/24 Javascript
浅谈JavaScript中promise的使用
2017/01/11 Javascript
JS字符串false转boolean的方法(推荐)
2017/03/08 Javascript
CSS3+JavaScript实现翻页幻灯片效果
2017/06/28 Javascript
轻松玩转BootstrapTable(后端使用SpringMVC+Hibernate)
2017/09/06 Javascript
vue.js将时间戳转化为日期格式的实现代码
2018/06/05 Javascript
JavaScript设计模式之职责链模式应用示例
2018/08/07 Javascript
使用vue 国际化i18n 实现多实现语言切换功能
2018/10/11 Javascript
Vue动态组件和异步组件原理详解
2019/05/06 Javascript
Python入门篇之列表和元组
2014/10/17 Python
python判断字符串编码的简单实现方法(使用chardet)
2016/07/01 Python
Python实现的井字棋(Tic Tac Toe)游戏示例
2018/01/31 Python
获取django框架orm query执行的sql语句实现方法分析
2019/06/20 Python
Python列表切片常用操作实例解析
2019/12/16 Python
python 爬虫如何实现百度翻译
2020/11/16 Python
一个入门级python爬虫教程详解
2021/01/27 Python
欧洲最大的笔和书写专家:The Pen Shop
2017/03/19 全球购物
DJI美国:消费类无人机领域的领导者
2018/04/27 全球购物
Kangol帽子官网:坎戈尔袋鼠
2018/09/26 全球购物
C++如何引用一个已经定义过的全局变量
2014/08/25 面试题
10的分与合教学反思
2014/04/30 职场文书
教育合作协议范本
2014/10/17 职场文书
2015年体育部工作总结
2015/04/02 职场文书
搬迁通知
2015/04/20 职场文书
门球健将观后感
2015/06/16 职场文书
诺贝尔奖获得者名言100句:句句启人心智,值永久收藏
2019/08/09 职场文书
MySql子查询IN的执行和优化的实现
2021/08/02 MySQL