深入浅析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 相关文章推荐
JavaScript 面向对象编程(1) 基础
May 18 Javascript
js 调用父窗口的具体实现代码
Jul 15 Javascript
jquery淡入淡出效果简单实例
Jan 14 Javascript
浅谈Javascript事件对象
Feb 05 Javascript
使用vue.js实现checkbox的全选和多个的删除功能
Feb 17 Javascript
JavaScript设计模式之策略模式详解
Jun 09 Javascript
JS获取input[file]的值并显示在页面的实现方法
Mar 09 Javascript
vue获取当前激活路由的方法
Mar 17 Javascript
javascript实现日历效果
Jun 17 Javascript
elementui之el-tebs浏览器卡死的问题和使用报错未注册问题
Jul 06 Javascript
微信小程序跳转到其他网页(外部链接)的实现方法
Sep 20 Javascript
vue 在单页面应用里使用二级套嵌路由
Dec 19 Vue.js
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 购物车的例子
2009/05/04 PHP
PHP设计模式之建造者模式定义与用法简单示例
2018/08/13 PHP
js正确获取元素样式详解
2009/08/07 Javascript
jQuery中delegate和on的用法与区别详细解析
2014/01/26 Javascript
Jquery+asp.net后台数据传到前台js进行解析的方法
2014/05/11 Javascript
JavaScript通过join函数连接数组里所有元素的方法
2015/03/20 Javascript
javascript的正则匹配方法学习
2016/02/24 Javascript
seajs学习教程之基础篇
2016/10/20 Javascript
Vue.js第二天学习笔记(vue-router)
2016/12/01 Javascript
完美实现js焦点轮播效果(一)
2017/03/07 Javascript
JSON与js对象序列化实例详解
2017/03/16 Javascript
图片懒加载imgLazyLoading.js使用详解
2020/09/15 Javascript
Angular CLI 使用教程指南参考小结
2019/04/10 Javascript
JS字符串常用操作方法实例小结
2019/06/24 Javascript
ES6常用小技巧总结【去重、交换、合并、反转、迭代、计算等】
2019/12/21 Javascript
JavaScript复制变量三种方法实例详解
2020/01/09 Javascript
使用Karma做vue组件单元测试的实现
2020/01/16 Javascript
jQuery实现的移动端图片缩放功能组件示例
2020/05/01 jQuery
详解JS预解析原理
2020/06/16 Javascript
详解vue中v-model和v-bind绑定数据的异同
2020/08/10 Javascript
[14:24]Optic Gaming vs PSG LGD BO3
2018/06/07 DOTA
爬山算法简介和Python实现实例
2014/04/26 Python
python完成FizzBuzzWhizz问题(拉勾网面试题)示例
2014/05/05 Python
详解 Python 读写XML文件的实例
2017/08/02 Python
flask框架视图函数用法示例
2018/07/19 Python
六行python代码的爱心曲线详解
2019/05/17 Python
Python 闭包,函数分隔作用域,nonlocal声明非局部变量操作示例
2019/10/14 Python
keras.utils.to_categorical和one hot格式解析
2020/07/02 Python
Python中qutip用法示例详解
2020/10/02 Python
python搜索算法原理及实例讲解
2020/11/18 Python
HTML5 Canvas——用路径描画线条实例介绍
2013/06/09 HTML / CSS
天猫精选:上天猫,就够了
2016/09/21 全球购物
工作自荐信
2013/12/11 职场文书
环卫工人先进事迹材料
2014/06/02 职场文书
2015年度个人思想工作总结
2015/04/08 职场文书
Redis高并发缓存架构性能优化
2022/05/15 Redis