深入浅析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 数值项目的格式化函数代码
May 14 Javascript
jQuery Validate 验证,校验规则写在控件中的具体实例
Feb 27 Javascript
node.js中的socket.io入门实例
Apr 26 Javascript
jQuery实现的鼠标滑过弹出放大图片特效
Jan 08 Javascript
jQuery基础的工厂函数以及定时器的经典实例分析
May 20 Javascript
jQuery源码解读之extend()与工具方法、实例方法详解
Mar 30 jQuery
jquery+ajax实现省市区三级联动 (封装和不封装两种方式)
May 15 jQuery
设置cookie指定时间失效(实例代码)
May 28 Javascript
JS实现根据指定值删除数组中的元素操作示例
Aug 02 Javascript
vue-cli构建vue项目的步骤详解
Jan 27 Javascript
微信小程序学习笔记之目录结构、基本配置图文详解
Mar 28 Javascript
使用express获取微信小程序二维码小记
May 21 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字符串截取中文截取2,单字节截取模式
2007/12/10 PHP
PHP+Ajax异步通讯实现用户名邮箱验证是否已注册( 2种方法实现)
2011/12/28 PHP
基于PHP开发中的安全防范知识详解
2013/06/06 PHP
php算法实例分享
2015/07/14 PHP
WordPress中获取指定分类及其子分类下的文章数目
2015/12/31 PHP
Yii框架实现多数据库配置和操作的方法
2017/05/25 PHP
js中遍历Map对象的方法
2016/07/27 Javascript
jQuery的ajax和遍历数组json实例代码
2016/08/01 Javascript
利用require.js与angular搭建spa应用的方法实例
2017/07/19 Javascript
JavaScript对JSON数据进行排序和搜索
2017/07/24 Javascript
Angular5.1新功能分享
2017/12/21 Javascript
AngularJS标签页tab选项卡切换功能经典实例详解
2018/05/16 Javascript
小程序转发探索示例
2019/02/19 Javascript
在vue项目中使用sass语法问题
2019/07/18 Javascript
JS动态显示倒计时效果
2019/12/12 Javascript
vue+animation实现翻页动画
2020/06/29 Javascript
Vue + Element-ui的下拉框el-select获取额外参数详解
2020/08/14 Javascript
vue+elementUI 实现内容区域高度自适应的示例
2020/09/26 Javascript
js实现简单商品筛选功能
2021/02/02 Javascript
[34:47]完美世界DOTA2联赛PWL S2 Magma vs LBZS 第一场 11.18
2020/11/18 DOTA
python中对list去重的多种方法
2014/09/18 Python
Python实战购物车项目的实现参考
2019/02/20 Python
使用OpenCV实现仿射变换—平移功能
2019/08/29 Python
HTML页面中添加Canvas标签示例
2015/01/01 HTML / CSS
加拿大时尚少女服装品牌:Garage
2016/10/10 全球购物
俄罗斯小米家用电器、电子产品和智能家居商店:Poood.ru
2020/04/03 全球购物
J2ee常用的设计模式?说明工厂模式
2015/05/21 面试题
文秘专业毕业生就业推荐信
2013/11/08 职场文书
课程设计心得体会
2013/12/28 职场文书
《孔子游春》教学反思
2014/02/25 职场文书
学校招生宣传广告词
2014/03/19 职场文书
财务管理专业自荐书
2014/09/02 职场文书
假期安全教育广播稿
2014/10/04 职场文书
傅雷家书读书笔记
2015/06/29 职场文书
解决numpy和torch数据类型转化的问题
2021/05/23 Python
详细谈谈MYSQL中的COLLATE是什么
2021/06/11 MySQL