深入浅析JavaScript中对事件的三种监听方式

 更新时间:2015年09月29日 16:38:40   作者:MaxIE  
最近这段时间因为每天要修改网站,为网站做特效,所以看了很多的js接触事件,自己只会使用一小部分,有时用的时候也比较混乱,现在系统的整理了一下,本篇文章跟大家分享的是JavaScript中对事件的三种监听方式

事件(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>

在绑定多个相同的事件的时候,前两种方法会产生覆盖,而第三中方法则会同时执行多个事件。

相关文章

  • layui按条件隐藏表格列的实例

    layui按条件隐藏表格列的实例

    今天小编就为大家分享一篇layui按条件隐藏表格列的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-09-09
  • 原生js二级联动效果

    原生js二级联动效果

    这篇文章主要为大家详细介绍了原生js二级联动效果,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-06-06
  • 基于PHP pthreads实现多线程代码实例

    基于PHP pthreads实现多线程代码实例

    这篇文章主要介绍了基于PHP pthreads实现多线程代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-06-06
  • js实现字符串的16进制编码不加密

    js实现字符串的16进制编码不加密

    关于十六进制编码的问题在很多情况下都会用到,所以使用JS写了个小程序转换一下
    2014-04-04
  • JavaScript 字符串常用操作小结(非常实用)

    JavaScript 字符串常用操作小结(非常实用)

    这篇文章主要介绍了JavaScript 字符串常用操作的知识,包括字符串截取,查找类的方法,对js字符串操作相关知识感兴趣的朋友一起学习吧
    2016-11-11
  • html判断当前页面是否在iframe中的实例

    html判断当前页面是否在iframe中的实例

    下面小编就为大家带来一篇html判断当前页面是否在iframe中的实例。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-11-11
  • JavaScript使用Web Worker解析CSV文件的操作方法

    JavaScript使用Web Worker解析CSV文件的操作方法

    在处理大型 CSV 文件时,直接在主线程中解析可能会导致页面卡顿,影响用户体验,使用 Web Worker 可以将计算密集型任务移到后台线程,避免阻塞主线程,从而提升应用的响应速度,所以本文给大家介绍了JavaScript使用Web Worker解析CSV文件的操作方法,需要的朋友可以参考下
    2025-03-03
  • 小程序如何自主实现拦截器的示例代码

    小程序如何自主实现拦截器的示例代码

    这篇文章主要介绍了小程序如何自主实现拦截器,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-11-11
  • 分享Bootstrap简单表格、表单、登录页面

    分享Bootstrap简单表格、表单、登录页面

    本文给大家分享Bootstrap简单表格、表单、登录页面的实例代码,非常不错,具有参考借鉴价值,需要的的朋友参考下吧
    2017-08-08
  • JavaScript中实现在光标位置插入内容的几种方法

    JavaScript中实现在光标位置插入内容的几种方法

    本文主要介绍了在网页开发中,如何使用JavaScript在文本输入框或富文本编辑器的光标位置插入内容的实践,包括获取光标位置的方法,创建文本节点,操作Selection对象,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2024-10-10

最新评论