深入浅析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 相关文章推荐
alert中断settimeout计时功能
Jul 26 Javascript
struts2+jquery组合验证注册用户是否存在
Apr 30 Javascript
node.js中的fs.lstatSync方法使用说明
Dec 16 Javascript
基于BootStrap Metronic开发框架经验小结【六】对话框及提示框的处理和优化
May 12 Javascript
JavaScript中Form表单技术汇总(推荐)
Jun 26 Javascript
js判断文件格式及大小的简单实例(必看)
Oct 11 Javascript
原生js实现打字动画游戏
Feb 04 Javascript
创建echart多个联动的示例代码
Nov 23 Javascript
Vue实现搜索结果高亮显示关键字
May 28 Javascript
vue.js实现备忘录demo
Jun 26 Javascript
关于layui时间回显问题的解决方法
Sep 24 Javascript
记一次用ts+vuecli4重构项目的实现
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开发中常用的8个小技巧
2008/08/27 PHP
php函数指定默认值方法的小例子
2013/12/04 PHP
php中随机函数mt_rand()与rand()性能对比分析
2014/12/01 PHP
php实现可逆加密的方法
2015/08/11 PHP
PHP加MySQL消息队列深入理解
2021/02/27 PHP
Extjs TriggerField在弹出窗口显示不出问题的解决方法
2010/01/08 Javascript
统计jQuery中各字符串出现次数的工具
2012/05/03 Javascript
jquery阻止后续事件只执行第一个事件
2014/07/24 Javascript
jquery实现鼠标点击后展开列表内容的导航栏效果
2015/09/14 Javascript
jQuery之简单的表单验证实例
2016/07/07 Javascript
Ajax和Comet技术总结
2017/02/19 Javascript
使用nodejs+express实现简单的文件上传功能
2017/12/27 NodeJs
关于TypeScript模块导入的那些事
2018/06/12 Javascript
微信小程序实现原生步骤条
2019/07/25 Javascript
Vue性能优化的方法
2020/07/30 Javascript
基python实现多线程网页爬虫
2015/09/06 Python
Python3 处理JSON的实例详解
2017/10/29 Python
Python数据分析之双色球中蓝红球分析统计示例
2018/02/03 Python
浅谈numpy数组中冒号和负号的含义
2018/04/18 Python
python接口自动化(十六)--参数关联接口后传(详解)
2019/04/16 Python
用Cython加速Python到“起飞”(推荐)
2019/08/01 Python
Python 一键获取百度网盘提取码的方法
2019/08/01 Python
python文字转语音实现过程解析
2019/11/12 Python
python使用HTMLTestRunner导出饼图分析报告的方法
2019/12/30 Python
使用Bazel编译TensorBoard教程
2020/02/15 Python
python实现全排列代码(回溯、深度优先搜索)
2020/02/26 Python
PyCharm MySQL可视化Database配置过程图解
2020/06/09 Python
pycharm全局搜索的具体步骤
2020/07/28 Python
python中numpy.empty()函数实例讲解
2021/02/05 Python
使用CSS3制作饼状旋转载入效果的实例
2015/06/23 HTML / CSS
使用canvas来完成线性渐变和径向渐变的功能的方法示例
2019/07/25 HTML / CSS
BabyBjörn婴儿背带法国官网:BabyBjorn法国
2018/06/16 全球购物
size?爱尔兰官方网站:英国伦敦的球鞋精品店
2019/03/31 全球购物
个人优缺点自我评价
2014/01/27 职场文书
教师试用期自我鉴定
2014/02/12 职场文书
nginx如何将http访问的网站改成https访问
2021/03/31 Servers